请考虑以下代码:
type Foo = "Foo" | "Bar" | "Baz"
function isInFoo(str: string) boolean {
// return Foo.contains(str); ?
}
在打字稿中,是否有一种优雅的方法来检查str
类型Foo
是否属于<{1}}?
答案 0 :(得分:1)
类型 Foo 不会被编译到生成的javascript中。它无法以优雅的方式实现。作为一个选项:使用具有指定字符串的数组,或通过枚举获取这些字段。
答案 1 :(得分:1)
类型注释从已编译的代码中删除,并且在运行时不可用。但是,为了扩展Ivan的答案,下面是一个从数组中提取类型化数据的示例:
const fooBar = ['foo', 'bar', 'baz'] as const;
type FooBar = typeof fooBar[number]; // "foo" | "bar" | "baz"
然后,您可以编写一个自定义类型防护,以在运行时检查字符串:
function isFooBar(string: unknown): string is FooBar {
return typeof string === 'string' && string in fooBar;
}
并像这样使用它:
const maybeFooBar: unknown = 'baz';
if (isFooBar(maybeFooBar)) {
console.log('Typescript knows this is a FooBar');
}