interface Obj {
foo?: string;
bar?: string;
}
const fn = (obj: Obj, key: keyof Obj) => {
if (obj.foo) {
const val1 = obj.foo; // string
}
if (obj['foo']) {
const val2 = obj['foo'] // string
}
const picked = obj[key];
if (picked) {
const val3 = picked; // string
}
if (obj[key]) {
const val4 = obj[key]; // string | undefined
}
};
我想知道为什么在val4
的情况下缩小类型不会起作用。
我知道我可以使用!
或自定义定义的类型防护answered here。但是我想知道的是原因。