对象类型
Object
类型的一个特点是除了undefined
值和null
值外,其他任何值都可以赋值给Object类型。在使用Object类型时容易出现的一个错误是,将Object类型应用于自定义变量、参数或属性等类型。新的object
类型表示非原始类型。object类型使用object关键字作为标识,object类型名中的字母全部为小写。在object类型上仅允许访问对象的公共属性和方法。
let x: Object;
x = { y: 0 };
x = 66;
新的object类型能够准确地表示非原始类型,因为原始类型不允许赋给object类型。只有非原始类型,也就是对象类型能够赋给object类型。object类型仅能够赋给这三种类型,分别为顶端类型any和unknown
、Object对象
、空对象类型的字面量
。
const x: object = {};
const y: Object = x;
有一些内置方法只接受对象作为参数,例如Object.create()
方法,这个方法第一个参数必须传入对象或者null值作为新创建对象的原型。如果传入的不是对象而是原始类型的值。运行时就会报错。现在引入object之后如果我们传入原始类型的参数,编译器进行检查时可以发现这个错误。
在定义对象类型字面量时,我们需要将类型成员依次列出。下面代码中的x表示对象类型字面量中的类型成员,类型成员需要填写到大括号中。在每个类型成员之间不仅可以使用分号进行分隔,而且还可以使用逗号进行分隔,这两种分隔方式都没有区别。在类型成员列表中的最后一个成员的后面可以省略分好或者逗号。
{
x,
x,
...
}
// 逗号或者分好
{
y;
y
}
对象类型字面量的类型成员有属性签名、调用签名、构造签名、方法签名、索引签名。其中属性签名声明了对象类型中属性成员的名称和类型。而且属性签名中的属性名可以为可计算属性名。可计算属性名的类型可以为number类型或string类型的字面量。也可以为unique symbol
类型。默认情况下,属性签名定义的对象属性是必选属性,如果我们想要变成可选的,我们可以在属性名的后面添加一个问号。这样的可选属性可以被忽略。当我们想要表示忽略该属性的值。我们可以给可选属性传入undefined值
来表示。