【发布时间】:2021-11-26 08:41:47
【问题描述】:
这是我的问题的一个示例 (demo in ts playground)
type Tkey = 'foo' | 'bar' | 'defaultKey'
const typedObject: Record<Tkey, Boolean> = {
'foo': true,
'bar': false,
'defaultKey': true
}
// type does not persist string narrowing
const entries = Object.entries(typedObject) // [string, Boolean][]
所以[key, values] 中的key 是string 类型,而不是Tkey 类型。
作为一种解决方法,您可以事后手动强制,但最好在操作期间定义类型。
const typedEntries = entries as [Tkey, Boolean][]
【问题讨论】:
-
这背后的原因是,与编译时相比,对象在运行时可能具有更多的属性。有关更多信息,请参阅 TypeScript PR#12253 上的 comment。实际上,您想要的行为之前在PR#12207 中合并,但后来在PR#12547 中删除。
-
另请参阅question 了解更多上下文。
标签: typescript