我对接口中的这三种类型的值感到困惑:
interface LK0 {
name: {}
}
和
interface LK1 {
name
}
和
interface LK2 {
name: any
}
这三种类型似乎是相同的,无论我为lk
指定哪种类型,打字稿都将编译而不会出错:
const lk0: LK0 = {
name: {
a: 1,
},
}
const lk1: LK1 = {
name: {
a: 1,
},
}
const lk2: LK2 = {
name: {
a: 1,
},
}
所以我的问题是:这三种类型的界面有什么区别?
更新:2018/12/27
我发现这个answer非常清楚地解释了我的问题,关于object
,Object
和{}
类型之间的区别。
答案 0 :(得分:0)
LK0
-类型为{}
,基本上表示一个空对象。您将可以分配任何*值,但是任何其他代码都将将该属性视为没有方法-完全为空。
*如果启用了编译器选项strictNullChecks
,则此类型将不允许null/undefined
值。
LK1
-类型是隐式 any
,请参见LK2
;
LK2
-类型为any
,这意味着它可以是任何值,并且无法进行任何其他类型推断。