美文网首页
联合类型和类型保护

联合类型和类型保护

作者: 泡杯感冒灵 | 来源:发表于2022-04-14 22:01 被阅读0次
联合类型,就是用 | 用算符,结合两个类型
  • 联合类型变量去取值的时候,只能取到这几个类型共有的属性和方法。
interface Bird {
  fly: boolean;
  sing: () => {};
}

interface Dog {
  fly: boolean;
  bark: () => {};
}

// anima 这个变量是可以联合类型,即可以是一个Bird又可以是一个Dog
// 联合类型通过 | 来实现
// 但是联合类型变量去取值的时候,只能取到这几个类型共有的属性和方法
function trainAnimal(anima: Bird | Dog) {
  anima.fly
}
如果调用不共有的属性和方法,就会报错,因为不确定参数的类型,到底是哪个,所以调用独有的方法会报错。如果想要代码更严谨,这个时候就需要类型保护的机制。
类型保护的几种实现方法
  • 方式1 类型断言的方式, 我们通过类型断言的方式,和自身对逻辑的理解去确保代码能够不再提错
function trainAnimal(animal: Bird | Dog) {
  // 如果我们知道animal.fly是true,那么它一定是一个bird类型。那么我们就通过as断言的方式,告诉你它就是Bird类型。
  if (animal.fly) {
    (animal as Bird).sing()
  }else {
    (anima as Dog).bark()
  }
}
  • 方式2 in语法来做类型保护
function trainAnimalSecond(animal: Bird | Dog) {
  // 我判断,如果animal里有sing方法,再去调用sing方法
  // typescript也会理解这个语法的意思,就不再报错
  if ('sing' in anima) {
    animal.sing();
  } else {
    animal.bark()
  }
}
  • 方式3 typeof语法来做类型保护
function add(first: string | number, second: string | number) {
  if (typeof first === 'string' || typeof second === 'string') {
    return `${first}${second}`;
  }
  return first + second;
}
  • 方式4使用instanceof 语法做类型保护,使用instanceof 做类型保护的前提是 数据结构的定义要使用 class而不是interface,因为只有类可以被instanceof 操作符调用,而instanceof 不可以
class NumberObj {
  count:number
}

function addSecond(first: object | NumberObj, second: object | NumberObj) {
  if (first instanceof NumberObj && second instanceof NumberObj) {
    return first.count + second.count;
  }
  return 0;
}

相关文章

  • 联合类型和类型保护

    类型保护 1、类型断言的方式 2、in 语法做类型保护 3、typeof 方式 4、instanceof 方式

  • 联合类型和类型保护

    联合类型,就是用 | 用算符,结合两个类型 联合类型变量去取值的时候,只能取到这几个类型共有的属性和方法。 如果调...

  • 高级TypeScript

    1、联合类型和类型保护 联合类型:一个变量可能有两种或两种以上的类型。 类型保护:联合类型的具体实例需...

  • TypeScript 08 - 高级类型

    交叉类型 联合类型 类型保护 可以为 null 的类型 字符串字面量类型 1. 交叉类型 交叉类型是将多个类型合并...

  • typescript中的类型保护

    类型保护: 当使用联合类型时, 我们必须尽量把当前值的类型收窄为当前值的实际类型,类型保护就是可执行运行时检查的一...

  • TypeScript中联合类型的类型保护

    在TypseScript中引入Redux给action加类型验证的时候我们考虑对于同一个请求的三个action的t...

  • 05-TypeScript-交叉类型-联合类型-类型保护

    交叉类型 格式: type1 & type2 & ... 交叉类型是将多个类型合并为一个类型 联合类型 格式: ...

  • typescript语法精讲一(笔记)

    - 使用联合类型 联合类型保证传入的是联合中的某一个类型的值即可 -可选类型补充 可选类型可以看作是 类型 和 u...

  • TS中type和interface类型守卫

    接口 通用函数类型 联合类型 联合类型技巧性使用场景 type 和 interface 区别 区别1: 定义类型范...

  • TypeScript06(类型断言 | 联合类型 | 交叉类型)

    联合类型 函数使用联合类型 交叉类型 多种类型的集合,联合对象将具有所联合类型的所有成员 类型断言 语法:值 as...

网友评论

      本文标题:联合类型和类型保护

      本文链接:https://www.haomeiwen.com/subject/sypisrtx.html