typescript - Varför kan jag inte använda StyleProp<ViewStyle> på min egen komponent


Jag använder TypeScript/Vscode för att koda min React Native-app. Jag vill ha kodkomplettering på mina egna komponenter för stil precis som React Natives egen View-komponent gör.

style-egenskapen på View definieras så här:

style?: StyleProp<ViewStyle>;

När jag provar det på min egen komponents egenskaper:

type MyViewProps = { style?:StyleProp<ViewStyle> }
class MyView extends Component<MyViewProps>{ ... }

Och försök att använda det på samma sätt som jag använder style på en vanlig vy:

<MyView style={{top:-20}}/>

Jag får följande fel:

Type '{ style: { top: number; }; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Pick<MyViewProps, never>, any, any>> & Readonly<Pick<MyViewProps, never>> & Readonly<...>'.
  Property 'style' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Pick<MyViewProps, never>, any, any>> & Readonly<Pick<MyViewProps, never>> & Readonly<...>'.ts(2322)

Vad gör jag för fel?

(Bara för tydlighetens skull: stilen funkar perfekt vid körning, det är bara kodkomplettering/IntelliSense som jag inte kan få att fungera)

Svar #1

Om du inte bryr dig om animerade vyer.

type MyViewProps = { style?: ViewStyle };

Och om du bryr dig om Animated.View.

type MaybeAnimated<T> = T | Animated.Value;
type AnimatedScalar = string | number;

type AnimatedStyle<T> = {
  [Key in keyof T]: T[Key] extends AnimatedScalar
    ? MaybeAnimated<T[Key]>
    : T[Key] extends Array<infer U>
    ? Array<AnimatedStyle<U>>
    : AnimatedStyle<T[Key]>;
};

Använd det så här.

type MyViewProps = { style?: AnimatedStyle<ViewStyle> };

Gå och rösta upp här också eftersom det är här jag hittade 99% av det här svaret. 🤠

Relaterade artiklar