当一个函数所需的参数声明了需要一个包含特定类型值的对象,那么ts可以接受多个参数的对象,只需要对象里存在需要的参数并类型正确
声明对象类型,可以使用type也可以使用接口
可选属性
接口里的属性不全是必须的。可选属性在应用“options bags”模式时很常用,即函数传入
带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。
interface SquareConfig {
color?: string;
width?: number;
}
只读属性
一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性
interface Point {
readonly x: number;
readonly y: number;
}
这样就可以通过在定义一个point的时候赋值,赋值后,x和y就不可以改变了
TypeScript具有ReadonlyArray
函数类型
为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。 前面两个表示函数的参数,后面的boolean表示函数的返回值 这样定义后,我们可以像使用其它接口一样使用这个函数类型的接口且函数的参数名不必和接口的一致
我们还可以不写参数的类型,因为我们已经在接口中规定了
索引类型
可以描述那些能够“通过索引得到”的类型,比如a[10]或ageMap[“daniel”]。 可索引类型具有一个 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。接口的继承
和类的继承一样使用 extends关键字
可以实现多继承
接口的交叉类型
可以使用 | 或者 & 来表示接口的交叉
| 表示并集
& 表示交集
接口的实现
可以使用 implements 来表示接口的实现
一个类可以同时实现多个接口
如果一个类实现了接口,那么之后在需要传入接口的地方,都可以将这个类传入
interface和type的区别
如果是定义非对象类型,通常推荐使用type,比如 联合类型 、函数类型
如果是对象类型,推荐使用interface,因为
- interface可以重复的对某个接口定义属性和方法,重复的会合并
- type定义的是别名,别名是不能重复的