Files
react-native/Libraries/Utilities/Platform.android.js
T
Jordan Brown b7f07473df Improve the type of Platform.select for Android
Summary:
There's no need for the 3 type arguments here. Flow will infer a union already if multiple properties are provided. Worse, by not providing these properties these tvars end up with no bounds, which can cause downstream constraints to stall. All of the suppresisons added here are for legitimate errors that were uncovered by consolidating to one type argument.

Changelog: [internal]

Reviewed By: SamChou19815

Differential Revision: D40355811

fbshipit-source-id: 088fd087017a6082c793ef00c8810a81b39fb9fb
2022-10-14 11:13:38 -07:00

80 lines
1.9 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
*/
import NativePlatformConstantsAndroid from './NativePlatformConstantsAndroid';
export type PlatformSelectSpec<T> = {
android?: T,
native?: T,
default?: T,
...
};
const Platform = {
__constants: null,
OS: 'android',
// $FlowFixMe[unsafe-getters-setters]
get Version(): number {
// $FlowFixMe[object-this-reference]
return this.constants.Version;
},
// $FlowFixMe[unsafe-getters-setters]
get constants(): {|
isTesting: boolean,
reactNativeVersion: {|
major: number,
minor: number,
patch: number,
prerelease: ?number,
|},
Version: number,
Release: string,
Serial: string,
Fingerprint: string,
Model: string,
ServerHost?: string,
uiMode: string,
Brand: string,
Manufacturer: string,
|} {
// $FlowFixMe[object-this-reference]
if (this.__constants == null) {
// $FlowFixMe[object-this-reference]
this.__constants = NativePlatformConstantsAndroid.getConstants();
}
// $FlowFixMe[object-this-reference]
return this.__constants;
},
// $FlowFixMe[unsafe-getters-setters]
get isTesting(): boolean {
if (__DEV__) {
// $FlowFixMe[object-this-reference]
return this.constants.isTesting;
}
return false;
},
// $FlowFixMe[unsafe-getters-setters]
get isTV(): boolean {
// $FlowFixMe[object-this-reference]
return this.constants.uiMode === 'tv';
},
select: <T>(spec: PlatformSelectSpec<T>): T =>
'android' in spec
? // $FlowFixMe[incompatible-return]
spec.android
: 'native' in spec
? // $FlowFixMe[incompatible-return]
spec.native
: // $FlowFixMe[incompatible-return]
spec.default,
};
module.exports = Platform;