考虑到这种情况:
interface TEST {
somename: string;
somenum: number;
}
const partialTest: Partial<TEST> = {
somename: '',
somenum: undefined,
}
const test: TEST = {
somename: '',
somenum: 1,
}
const destructured: TEST = {
...test,
...partialTest,
}
console.log(destructured);
为什么 typescript 没有给我一个错误,说 destructed
的 somenum
属性未定义?
console.log
有效地显示 somenum
的值未定义。
最佳答案
这很有趣。如果你让 typescript 推断类型,它就能正常工作:
const partialTest = {
somename: '',
somenum: undefined
};
const destructured: TEST = { // error
...test,
...partialTest,
};
这是因为在 string
上传播 undefined
会导致 undefined
不适合 TEST,而传播 string | undefined
覆盖 string
会产生 string
,适合 TEST。
除非没有缺失
类型来区分未定义
和“未定义”,否则 wont fix
关于javascript - 当我在解构原始类型后解构 Partial 类型时,Typescript 不会给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55404779/