使用打字稿更新本机状态中的样式

时间:2021-06-30 11:28:43

标签: typescript react-native react-native-android react-native-ios react-native-state

我正在使用带有打字稿的本机反应,并且我想从状态更新我的样式属性。但它给了我错误。

const [VerifiedCheck, setIsVerifiedCheck] = useState("flex");

<View style={{display: VerifiedCheck}}>
  <Icon name={'check-circle'} size={24} color={'green'} />
</View>

我在 style 处出错:

No overload matches this call.
  Overload 1 of 2, '(props: ViewProps | Readonly<ViewProps>): View', gave the following error.
    Type '{ display: string; }' is not assignable to type 'StyleProp<ViewStyle>'.
      Types of property 'display' are incompatible.
        Type 'string' is not assignable to type '"none" | "flex" | undefined'.
  Overload 2 of 2, '(props: ViewProps, context: any): View', gave the following error.
    Type '{ display: string; }' is not assignable to type 'StyleProp<ViewStyle>'.
      Types of property 'display' are incompatible.
        Type 'string' is not assignable to type '"none" | "flex" | undefined'.ts(2769)
index.d.ts(2522, 5): The expected type comes from property 'style' which is declared here on type 'IntrinsicAttributes & IntrinsicClassAttributes<View> & Readonly<ViewProps> & Readonly<{ children?: ReactNode; }>'
index.d.ts(2522, 5): The expected type comes from property 'style' which is declared here on type 'IntrinsicAttributes & IntrinsicClassAttributes<View> & Readonly<ViewProps> & Readonly<{ children?: ReactNode; }>'

1 个答案:

答案 0 :(得分:0)

正如错误所说,

Type 'string' is not assignable to type 
'"none" | "flex" | undefined'.ts(2769)

问题是当你说,

const [VerifiedCheck, setIsVerifiedCheck] = useState("flex");

verifiedCheck 的推断类型是 string,这是最常见的情况。例如,请参见:

const [title, setTitle] = useState("default title");

打字稿将 title 视为字符串很有意义。所以,我认为,如果你明确地告诉 typescript 可能的类型,它就不会打扰你了。像这样:

const [VerifiedCheck, setIsVerifiedCheck] = useState<"none" | "flex" | undefined>("flex");

<View style={{display: VerifiedCheck}}>
  <Icon name={'check-circle'} size={24} color={'green'} />
</View>