学习TypeScript 之高级类型

简介: 学习TypeScript 之高级类型

交叉类型(符号:“&”,Intersection Types):


交叉类型的作用同样是将多个类型合并叠加为一种类型来使用,叠加后的类型包含了所有类型特性。在TypeScript中有很多方案可以实现类型的扩展,如混入,继承,实现等,当我们的实际操作环境不适合面向对象来操作的时候,就应当考虑使用交叉类型来实现了。

**案例分析:**我们还是定义一个Person类作为基础,定义一个拳击的接口,我们最后要定义一个运动员,这个运动员由Person类和拳击接口叠加而成。


// Person
class Person {
  name: string;
  gender: boolean;
  age?: number;
  constructor(name: string, gender: boolean, age: number) {
    this.name = name;
    this.gender = gender;
    this.age = age;
  }
}
复制代码
// Boxing
interface Boxing {
  punches(): void;
}
复制代码
// sportsman
const sportsman: Person & Boxing = {
  name: "MMA大师",
  gender: true,
  age: 35,
  punches: () => {
    console.log("出拳💪");
  },
};
复制代码


联合类型(符号:“|”,Union Types)


联合类型的应用是在我们定义一些函数的时候需要传入的参数类型并非特定,如可以传入的形参类型为string,number,boolean,这个时候我们就可以通过“|”来实现类型的联合。

class Person {
  name: string;
  gender: boolean;
  age?: number;
  constructor(name: string, gender: boolean, age: number) {
    this.name = name;
    this.gender = gender;
    this.age = age;
  }
}
class Animal {
  name: string;
  gender: boolean;
  age?: number;
  constructor(name: string, gender: boolean, age: number) {
    this.name = name;
    this.gender = gender;
    this.age = age;
  }
}
function say(arg: Person | Animal): void {
  console.log(arg.name, arg.gender);
}
复制代码


类型保护&类型区分


上面的联合类型是当我们在需要传入多种类型的形参的定义方式,定义好后我们在实际使用的时候如何可以直接调用多种类型中相同的属性,函数,但是不同的内容要区分清楚是哪种类型所特有的。通常就是通过检测属性或函数是否存在后执行,如下:

function say(arg: Person | Animal): void {
  if (arg.name) {
    console.log(arg.name);
  }
}
复制代码


我们来看类型断言怎么做:

function say(arg: Person | Animal): void {
    console.log((<Person>arg).name);
    console.log((<Animal>arg).name);
  }
复制代码


typeof类型保护:


instanceof类型保护:

function say(arg: Person | Animal): void {
  if (arg instanceof Person) {
    console.log(arg.name);
  }
  if (arg instanceof Animal) {
    console.log(arg.name);
  }
}



相关文章
|
2天前
|
JavaScript
23.【TypeScript 教程】条件类型
23.【TypeScript 教程】条件类型
6 2
|
2天前
|
JavaScript 开发者
22.【TypeScript 教程】映射类型
22.【TypeScript 教程】映射类型
9 2
|
2天前
|
索引 JavaScript 前端开发
21.【TypeScript 教程】索引类型
21.【TypeScript 教程】索引类型
12 2
|
2天前
|
JavaScript
20.【TypeScript 教程】类型别名
20.【TypeScript 教程】类型别名
7 0
|
2天前
|
JavaScript
19.【TypeScript 教程】联合类型
19.【TypeScript 教程】联合类型
6 2
|
2天前
|
JavaScript 索引
18.【TypeScript 教程】交叉类型
18.【TypeScript 教程】交叉类型
6 2
|
2天前
|
JavaScript 开发者
17.【TypeScript 教程】TypeScript 类型兼容性
17.【TypeScript 教程】TypeScript 类型兼容性
8 2
|
2天前
|
JavaScript 编译器
15.【TypeScript 教程】类型保护
15.【TypeScript 教程】类型保护
10 4
|
2天前
|
JavaScript 编译器 前端开发
14.【TypeScript 教程】类型断言
14.【TypeScript 教程】类型断言
6 2
|
2天前
|
JavaScript
12.【TypeScript 教程】字面量类型
12.【TypeScript 教程】字面量类型
6 0