打字稿:对于 (let key in obj),`key` 是 `Extract<keyof T, string>` 而不仅仅是 `keyof T`,为什么?
Typescript: for (let key in obj), `key` is `Extract<keyof T, string>` instead of just `keyof T`, why?
我想 iterate
覆盖 object
,当我使用 for-in
时,我注意到一件非常奇怪的事情:
function forIn<T extends object>(obj: T): void {
for (let key in obj) {
// key's type is `Extract<keyof T, string>` instead of just `keyof T`
}
}
我的VSCode截图:
这引出了两个问题:
- 为什么
key
的类型是 Extract<keyof T, string>
而不是 keyof T
?
- 对象的
key
总是字符串类型,所以Extract<keyof T, string>
什么都不做,对吧?
TypeScript 2.9 扩展了键类型以包括数字和符号类型。
我想 iterate
覆盖 object
,当我使用 for-in
时,我注意到一件非常奇怪的事情:
function forIn<T extends object>(obj: T): void {
for (let key in obj) {
// key's type is `Extract<keyof T, string>` instead of just `keyof T`
}
}
我的VSCode截图:
这引出了两个问题:
- 为什么
key
的类型是Extract<keyof T, string>
而不是keyof T
? - 对象的
key
总是字符串类型,所以Extract<keyof T, string>
什么都不做,对吧?
TypeScript 2.9 扩展了键类型以包括数字和符号类型。