当将keyof
操作符应用于空对象时,我感到困惑。以下是示例代码:
const o = {};
const k : Array<keyof typeof o> = [];
// k has type never[]
为什么类型是never
?我认为never
是永远不会返回的函数的返回类型。难道类型不应该是any[]
吗?
像这样更改对象时,类型才有意义:
const o = {a: 1, b: 2};
const k : Array<keyof typeof o> = [];
// k has the type ("a" | "b")[]
我在实现一个返回对象键名的函数时发现了这个行为:
function getKeys(o: object) {
return Object.keys(o) as Array<keyof typeof o>;
}
该函数的返回类型应该是
(keyof typeof o)[]
,而不是never[]
,如果我没错的话。