我想提供一个字符串给一个react组件中的prop,这个prop来自一个库,但是即使这个库接受任何字符串,我也想确保我提供的字符串是某种类型的,如果不是,我希望typescript提供一个类型错误。
我喜欢下面这样的东西,但 typescript 会失败。
import React from "react";
// Can't modify this component or props
const ComponentFromLibrary: React.FC<{ str: string }> = ({ str }) => (
<span>{str}</span>
);
// -----
type AllowedStrings = 'Hello'|'World'
export default () => (
<div className="App">
{/* This should not fail */}
<ComponentFromLibrary str={"Hello" as AllowedStrings} />
{/* This should fail */}
<ComponentFromLibrary str={"world" as AllowedStrings} />
</div>
);
3条答案
按热度按时间6bc51xsx1#
将库组件 Package 在您自己的检查类型的组件中。
yhxst69z2#
我认为typescript编译器不工作是因为向下转换。类型
AllowedStrings
与类型string
重叠。这意味着向下转换正在工作,并且编译器理解"world"
具有类型AllowedStrings
。所以使用 Package 器组件是一个可以选择的解决方案。zynd9foi3#
也许您可以尝试使用TS
enum
下面是一个codesandbox示例
希望这有帮助:)