接口中的{}类型是什么?

时间:2018-12-11 04:21:12

标签: typescript types

我对接口中的这​​三种类型的值感到困惑:

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非常清楚地解释了我的问题,关于objectObject{}类型之间的区别。

1 个答案:

答案 0 :(得分:0)

LK0-类型为{},基本上表示一个空对象。您将可以分配任何*值,但是任何其他代码都将将该属性视为没有方法-完全为空。

*如果启用了编译器选项strictNullChecks,则此类型将不允许null/undefined值。

LK1-类型是隐式 any,请参见LK2

LK2-类型为any,这意味着它可以是任何值,并且无法进行任何其他类型推断。