TypeScript类型问题
请看一下下面的TypeScript片段。 为什么这不会引发编译错误?这不是明显的类型错误吗?我必须更改什么才能使其再次成为安全类型?TYVMTypeScript类型问题,typescript,types,typescript-typings,Typescript,Types,Typescript Typings,请看一下下面的TypeScript片段。 为什么这不会引发编译错误?这不是明显的类型错误吗?我必须更改什么才能使其再次成为安全类型?TYVM A型={ 从来没有, q?:部分 } B型={ p?:部分 问:从来没有 } C型=A|B 常数c:c={ p:{ 答:1,, b:2/这是一个不适用于包含并集和交集的嵌套类型的方法,人们期望的方式。过度的属性检查是类型系统的一种附加功能,只适用于对象文本,因此当它不适用时,事情会回到规则,其中类型{a:a,b:b}是的子类型{a:a},因此前一种类型的值
A型={
从来没有,
q?:部分
}
B型
={
p?:部分
问:从来没有
}
C型
=A
|B
常数c:c={
p:{
答:1,,
b:2/这是一个不适用于包含并集和交集的嵌套类型的方法,人们期望的方式。过度的属性检查是类型系统的一种附加功能,只适用于对象文本,因此当它不适用时,事情会回到规则,其中类型{a:a,b:b}
是的子类型{a:a}
,因此前一种类型的值应该可以分配给后一种类型的变量。您可能希望转到并给它一个允许的值,因为类型{a:number,b:number}
与{a:number}兼容
。不,它错误地简化为:-,因此它与部分
或空值无关。我设法将问题简化为以下情况:const c:{p:{a:number}}string={p:{a:1,b:2,//OK出于某种原因}}const d:{a:number}string={a:1,b:2,//现在检测到错误}基本上,当你创建嵌套对象时,类型推断会变得很奇怪。这不是我第一次看到类型推断的问题。当你将对象传递给函数时也会发生这种情况。@WayneC我反对它是重复的:与接口/继承/索引器无关。