当一个函数所需的参数声明了需要一个包含特定类型值的对象,那么ts可以接受多个参数的对象,只需要对象里存在需要的参数并类型正确

声明对象类型,可以使用type也可以使用接口

可选属性

接口里的属性不全是必须的。可选属性在应用“options bags”模式时很常用,即函数传入

带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。

  1. interface SquareConfig {
  2. color?: string;
  3. width?: number;
  4. }

只读属性

一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性

  1. interface Point {
  2. readonly x: number;
  3. readonly y: number;
  4. }

这样就可以通过在定义一个point的时候赋值,赋值后,x和y就不可以改变了

TypeScript具有ReadonlyArray类型,它与Array相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改:但是可以用断言来重新赋值数组

函数类型

为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。接口详解 - 图1 前面两个表示函数的参数,后面的boolean表示函数的返回值 这样定义后,我们可以像使用其它接口一样使用这个函数类型的接口

接口详解 - 图2

且函数的参数名不必和接口的一致

我们还可以不写参数的类型,因为我们已经在接口中规定了

索引类型

可以描述那些能够“通过索引得到”的类型,比如a[10]ageMap[“daniel”]。 可索引类型具有一个 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。

接口详解 - 图3

接口详解 - 图4

接口的继承

和类的继承一样使用 extends关键字

可以实现多继承

接口详解 - 图5

接口的交叉类型

可以使用 | 或者 & 来表示接口的交叉

| 表示并集

& 表示交集

接口详解 - 图6

接口的实现

可以使用 implements 来表示接口的实现

一个类可以同时实现多个接口

如果一个类实现了接口,那么之后在需要传入接口的地方,都可以将这个类传入

接口详解 - 图7

interface和type的区别

如果是定义非对象类型,通常推荐使用type,比如 联合类型 、函数类型

如果是对象类型,推荐使用interface,因为

  • interface可以重复的对某个接口定义属性和方法,重复的会合并
  • type定义的是别名,别名是不能重复的

接口详解 - 图8