如何检查字符串是TypeScript中特定接口的属性

时间:2019-01-04 13:53:07

标签: typescript

我确实有一个实际情况,我需要使用字符串文字按名称引用属性。我想使它成为类型安全的,并且感觉像在TypeScript中那样应该可行。考虑下面的简化示例:

interface MyInterface {
    foo: string,
}

const barName = <keyof MyInterface>'bar'    // No error?
const bazName = 'baz' as keyof MyInterface  // No error?
const bopName:keyof MyInterface = 'bop' // Finally, an error!

我相信答案是TypeScript中的<>as操作是“类型断言”而不是“类型强制转换尝试”。上面的前两个const基本上是说:“相信我,这 是MyInterface的键”,而第三个const则尝试进行类型化分配并失败。

我想知道我是否正确,如果是这样,是否还有其他内联方法可以测试字符串文字是否是给定接口的键,而无需创建临时变量。

1 个答案:

答案 0 :(得分:1)

对于在前两个const声明中没有出错的原因,您是正确的。

获取错误而不对变量进行显式类型注释的唯一方法是使用辅助函数:

interface MyInterface {
    foo: string,
}
const key = <T>(o: keyof T) => o;
const barName = key<MyInterface>('bar')    // error
const fooName = key<MyInterface>('foo')    // ok

您也可以按原样保留const声明,const将被键入为与字符串文字关联的字符串文字类型,并且在您第一次使用它来索引时会出现错误。 MyInterafce的实例,尽管这可能不适用于所有情况。