TypeScript里对象的类型——接口

接口的意义

在java这种面向对象的编程语言里,接口(Interface)是非常重要的概念,是对行为的抽象,由类(class)去实现(implement)。
在TS里,接口还可以用来规范对象的描述。

例1

1
2
3
4
5
6
7
8
9
interface Person {
name: string;
age: number;
}
let john: Person = {
name: 'John',
age: 29
};

john的属性必须有name和age(且value类型也一致),不可多不可少不可增不可改。

例2

如果对象的某些属性处于可用可不用的状态,那就需要设定可选属性,在属性后加一个问号即可。

1
2
3
4
5
6
7
8
interface Person {
name: string;
age?: number;
}
let john: Person = {
name: 'John',
};

这样,john的age属性就可以不设定。
但是仍然不允许添加新的属性

例3

如果对象的属性还不能够确定,有可能添加新的属性,则可以使用任意属性

1
2
3
4
5
6
7
8
9
10
interface Person {
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
name: 'Tom',
gender: 'male'
};

任意属性的数值类型最好命为any,因为一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

例4

如果对象的某个属性需要确定,避免更改,则可使用只读属性。
只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
id: 13579,
name: 'John',
gender: 'male'
};
tom.id = 24680;
// index.ts(14,5): error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.

Snapline wechat
扫码关注我的公众号“约翰柠檬的唱片店”
Buy me a cup of Coffee