Skip to content

react-native typings not work since typescript 3.1.1 #27421

Description

TypeScript Version: 3.2.0-dev.20180927

Search Terms: react-native, stylesheet

Code
I'm created repo to reproduce:

  1. git clone https://github.com/vovkasm/rn-ts-3.1.1.git
  2. cd rn-ts-3.1.1
  3. npm install && npm test

Paste here for easy reading

importReactfrom'react'import{StyleSheet,Text}from'react-native'consts=StyleSheet.create({didNotWork: {fontSize: 16,fontWeight: '900',// if we comment this line, errors gonemarginTop: 5,// if this line commented, errors also gone},work: {fontSize: 18,// fontWeight: '900', // when uncommented also work},})exportconstsample1=<Textstyle={s.work}/>exportconstsample2=<Textstyle={s.didNotWork}/>// ^ this line generate error:// index.tsx:17:30 - error TS2322: Type 'RegisteredStyle<{ fontSize: number; fontWeight: string; marginTop: number; }>' is not assignable to type 'StyleProp<TextStyle>'.// Type 'RegisteredStyle<{ fontSize: number; fontWeight: string; marginTop: number; }>' is not assignable to type 'RecursiveArray<false | TextStyle | RegisteredStyle<TextStyle> | null | undefined>'.// Property 'length' is missing in type 'Number & { __registeredStyleBrand: { fontSize: number; fontWeight: string; marginTop: number; }; }'.// 17 export const sample2 = <Text style={s.didNotWork} />// ~~~~~// node_modules/@types/react-native/index.d.ts:907:5// 907 style?: StyleProp<TextStyle>;// ~~~~~// The expected type comes from property 'style' which is declared here on type 'IntrinsicAttributes & IntrinsicClassAttributes<Text> & Readonly<{ children?: ReactNode; }> & Readonly<TextProps>'exportconstsample3=<Textstyle={{fontSize: 16,fontWeight: '900',marginTop: 5}}/>

Expected behavior:
No errors

Actual behavior:
An error occured:

index.tsx:17:30 - error TS2322: Type 'RegisteredStyle<{ fontSize: number; fontWeight: string; marginTop: number; }>' is not assignable to type 'StyleProp<TextStyle>'.
Type 'RegisteredStyle<{ fontSize: number; fontWeight: string; marginTop: number; }>' is not assignable to type 'RecursiveArray<false | TextStyle | RegisteredStyle<TextStyle> | null | undefined>'.
Property 'length' is missing in type 'Number & { __registeredStyleBrand: { fontSize: number; fontWeight: string; marginTop: number; }; }'.
17 export const sample2 = <Text style={s.didNotWork} />
~~~~~
node_modules/@types/react-native/index.d.ts:907:5
907 style?: StyleProp<TextStyle>;
~~~~~
The expected type comes from property 'style' which is declared here on type 'IntrinsicAttributes & IntrinsicClassAttributes<Text> & Readonly<{ children?: ReactNode; }> & Readonly<TextProps>'

Playground Link:https://github.com/vovkasm/rn-ts-3.1.1

Related Issues: no

Sorry, I can't found a way to reduce this regression farther to smallest possible example. But it looks like this actually typescript regression because:

  1. It works with ts 3.0.3
  2. It magically (from my point of view) will pass test if we change code in unrelated parts (comment/uncomment some styles - see comments in index.tsx)
  3. I traced type definitions of react-native.d.ts and they appears to be correct (again, from my point of view)...

Metadata

Metadata

Labels

Working as IntendedThe behavior described is the intended behavior; this is not a bug

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions