正如标题所述,我似乎无法细化对象上的键,并且想知道我做错了什么。
const x: { key?: number } = {};
if (typeof x.key === 'number') {
console.log(x.key); // typescript sees `x.key` as `number | undefined` still
}
let y: number | undefined;
if (typeof y === 'number') {
console.log(y); // typescript sees `y` as `number`
}
答案 0 :(得分:0)
我不确定您要在这里实现什么,但是typeof
在TypeScript中扮演三个角色(感谢@MikeHill);
我认为您正在尝试使用typeof实现无法满足的结果。您的示例代码可能需要做一些工作,还不清楚您要执行的操作。
答案 1 :(得分:0)
表达式x.key可能会有副作用,因此编译器无法保证类型
class X {
private firstTime = true;
get key(): number | undefined {
if (this.firstTime) {
this.firstTime = false;
return 1;
}
return undefined;
}
}
const x: { key?: number } = new X();
console.log(typeof x.key); // number
console.log(typeof x.key); // undefined