简介
除了原始类型,对象是 JavaScript 最基本的数据结构。TypeScript 对于对象类型有很多规则。
对象类型的最简单声明方法,就是使用大括号表示对象,在大括号内部声明每个属性和方法的类型。
const obj: {
x: number;
y: number;
} = { x: 1, y: 1 };
上面示例中,对象obj
的类型就写在变量名后面,使用大括号描述,内部声明每个属性的属性名和类型。
一旦声明了类型,对象赋值时,就不能缺少指定的属性,也不能有多余的属性。
type MyObj = {
x: number;
y: number;
};
const o1: MyObj = { x: 1 }; // 报错
const o2: MyObj = { x: 1, y: 1, z: 1 }; // 报错
上面示例中,变量o1
缺少了属性y
,变量o2
多出了属性z
,都会报错。
对象的方法使用函数类型描述。
const obj: {
x: number;
y: number;
add(x: number, y: number): number;
// 或者写成
// add: (x:number, y:number) => number;
} = {
x: 1,
y: 1,
add(x, y) {
return x + y;
},
};
上面示例中,对象obj
有一个方法add()
,需要定义它的参数类型和返回值类型。
type
命令可以为对象类型声明一个别名。
type MyObj = {
x: number;
y: number;
};
const obj: MyObj = { x: 1, y: 1 };
可选属性
如果某个属性是可选的(即可以忽略),需要在属性名后面加一个问号。
const obj: {
x: number;
y?: number;
} = { x: 1 };
上面示例中,属性y
是可选的。
可选属性等同于允许赋值为undefined
,下面两种写法是等效的。
type User = {
firstName: string;
lastName?: string;
};
// 等同于
type User = {
firstName: string;
lastName: string | undefined;
};
上面示例中,类型User
的属性lastName
可以是字符串,也可以是undefined
,就表示该属性可以省略不写。