ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ts类型保护

2021-07-09 17:04:24  阅读:159  来源: 互联网

标签:return name ts number 保护 animal 类型 input interface


 类型保护:就是一些表达式或者关键字在编译时候就能确定在某个作用域内变量的类型  关键字有: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, })
  

 

 

标签:return,name,ts,number,保护,animal,类型,input,interface
来源: https://www.cnblogs.com/xiaoliziaaa/p/14991291.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有