实用程序类型Partial<>
不仅将类型的键设置为可选,还将它们的值设置为具有未定义的并集:
type Obj = { foo: number }
type PartialObj = Partial<Obj> // { foo?: number | undefined }
是否存在会导致{ foo?: number }
答案 0 :(得分:1)
是否存在会导致
{ foo?: number }
的实用程序类型?
不存在实用程序类型。
为什么? TypeScript将{ foo?: number }
和{ foo?: number | undefined }
视为同一类型。
这是VS Code中的悬停结果,表明两种类型的结果相同。
在某些方面,这是有道理的,因为不存在的属性等于undefined
。此处,obj1
不具有foo
属性,而foo
属性是三倍等于undefined
。
const obj1 = {};
const obj2 = {
foo: undefined
};
console.log(obj1.foo === undefined);
console.log(obj2.foo === undefined);
也就是说,具有不存在的属性确实的对象与将该属性设置为undefined
的对象不同。在下面,控制台为obj1
和obj2
输出不同的内容。
const obj1 = {};
const obj2 = {
foo: undefined
};
console.log(obj1);
console.log(obj2);
那么类型系统是否“错误”?应该有一种说法:“该属性必须是数字或什么都没有……甚至没有定义。”可能是,可能不是;确保答案充满复杂性。
JavaScript是一种有很多疣的语言,TypeScript尽其所能以静态类型表示它-疣和所有疣。结果类型系统不是“声音” nor does it try to be。