ts类型保护

 类型保护:就是一些表达式或者关键字在编译时候就能确定在某个作用域内变量的类型  关键字有:if-else typeof instanceof  prop in obj  a is b is语法

typeof instanceof

 interface IDoubleFunc {
    (input: string | number | boolean): void
  }
  //typeof关键字来确定变量类型
  const double1: IDoubleFunc = input => {
    if (typeof input === 'string') return input + input
    if (typeof input === 'number') return input * 2
    if (typeof input === 'boolean') return !input
  }

  // instanceof 
  class Animal {
    name: string;
    constructor(name: string) {
      this.name = name
    }
  }
  class Bird extends Animal {
    swing: number = 2
  }
  interface IGetNameFunc {
    (animal: Animal): void
  }
  const getName: IGetNameFunc = animal => {
    if (animal instanceof Bird) return animal.swing
    if (animal instanceof Animal) return animal.name //到了这里只能点name了 没有swing提示了

  }
  

 prop in obj/obj.hasOwnpropery(prop)

 interface IBird {
    swing: number
  }
  interface IDog {
    leg: number
  }
  interface IGetNumberFunc {
    (x: IBird | IDog): number
  }
  const getNumber: IGetNumberFunc = x => {
    if ('swing' in x) return x.swing
    return x.leg
  }
  getNumber({ swing: 2 })

 

x is 类型

interface IBird {
    name: 'bird',
    leg: number
  }
  interface IDog {
    name1: 'dog'
    leg: number
  }
  type Animal = IBird | IDog
  interface IGetAnimal {
    (animal: Animal): void
  }
  function isBird(x: Animal): x is IBird {
    return x.leg === 2
  }
  const getAnimal: IGetAnimal = animal => {
    if (isBird(animal)) console.log(animal.name);
    else console.log(animal.name1);
  }
  getAnimal({ name: 'bird', leg: 2, })
  

 

 

上一篇:继承多态


下一篇:mysql 删除重复数据 保留1条