反应,打字稿和道具类型:如何使用自己的类型?

时间:2020-02-17 09:36:48

标签: reactjs typescript react-proptypes

我有一个字符串类型的文字,格式为type MyType = 'str1' | 'str2' | 'str3',我希望我的一个道具只接受这种类型,但是我不知道如何告诉PropTypes。

我尝试使用propTypes.oneOf(['str1', 'str2', 'str3']),但是打字稿将其推断为普通字符串,这是我不想要的。

1 个答案:

答案 0 :(得分:4)

由于这是使用TypeScript进行类型检查的,因此您不要尝试在React运行时级别(propTypes)上进行操作,而是在TypeScript级别上进行操作。

您的组件应在其props类型中使用字符串文字类型:

type MyComponentProps = {
    propName: MyType;
}

然后,如果它是类组件:

class MyComponent extends React.Component<MyComponentProps, /*...your state type here...*/> {
    // ...
}

或者如果您使用的是功能组件:

const MyComponent: React.FC<MyComponentProps> = ({propName}) => {
    // ...
};