TypeScript接口
# TypeScript接口
1.使用interface关键字来声明接口
2.接口名称(任意合法变量名称)
3.声明接口后,直接使用接口名称来作为变量的类型
我们使用接口来定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)
简单理解就是:为我们的代码提供一种约定
使用关键字interface来声明接口
我们定义了一个接口 Person,接着定义了一个变量 tom,它的类型是 Person
这样,我们就约束了 tom 的形状必须和接口 Person 一致
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom',
age: 25
};
// 定义对象数组用interface
interface X {
name:string
}
let arr:x[]={
{
name:"hh"
},
{
name:"胡萝卜"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
接口一般首字母大写。(当然挺多人也习惯 I 大写字母开头,用来表示这是一个接口)
# 可选属性
带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?
符号
可选属性的好处之一是可以对可能存在的属性进行预定义,好处之二是可以捕获引用了不存在的属性时的错误
interface Person {
readonly name: string;
age?: number;
}
1
2
3
4
2
3
4
# 只读属性
一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly
来指定只读属性:
赋值后, 再也不能被改变了。
interface Point {
readonly x: number;
readonly y: number;
}
1
2
3
4
2
3
4
可以通过赋值一个对象字面量来构造一个Point
。 赋值后, x
和y
再也不能被改变了。
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
1
2
2
此外 TypeScript 还提供了 ReadonlyArray 类型,它与 Array 相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改。
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
ro[0] = 12; // error!
ro.push(5); // error!
ro.length = 100; // error!
a = ro; // error!
1
2
3
4
5
6
2
3
4
5
6
# 索引签名
有时候我们希望一个接口中除了包含必选和可选属性之外,还允许有其他的任意属性,这时我们可以使用 索引签名 的形式来满足上述要求。
需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
interface Person {
name: string;
age?: number;
[prop: string]: any; // prop字段必须是 string类型 or number类型。 值是any类型,也就是任意的
}
const p1:Person = { name: "张麻子" };
const p2:Person = { name: "树哥", age: 28 };
const p3:Person = { name: "汤师爷", sex: 1 }
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2024/08/14, 04:14:33