TypeScript 之 类型推断 类型兼容 类型保护

2019-10-11  本文已影响0人  _一九九一_

类型推断

// 断言为number
let a = 1;
// 断言为number[]
let b = [1,2]

interface Foo{
 bar: number
}

let foo = {} as Foo    // 增加了Foo就不会报错 类型断言 
foo.bar = 1  // 空对象没有bar 会报错

//但是常用直接指定类型 不建议用as断言方式
let foo: Foo = {
 bar: 1
}

类型兼容性问题

类型保护

enum Type { Strong, Week }

class Java{
  helloJava(){
    console.log('java')
  }
  java:any
}

 class JavaScript { 
   helloJavaScript(){
     console.log('JavaScript')
   }
   javascript: any
 }

function isJava(lang: Java | JavaScript): lang is Java{
  return (lang as Java).helloJava !== undefined
}

function getLanguage(type: Type, x: sting | number){
  let lang = type = Type.Strong ? new java() : new JavaScript()

  // 方式一:
  if( lang instanceof Java){
    lang.helloJava()
  }else{
    lang.helloJavaScript()
  }

//  方式二:class里面添加属性
  if('java' in lang){
    lang.helloJava()
  }else{
    lang.helloJavaScript()
  }

  // 方式三:
  if(typeof x === 'string'){
    x.leng
  }else{
    x.toFixed(2)
  }

  //方式四: 创建一个类型保护函数判断对象类型
  if(isJava(lang)){
    lang.helloJava()
  }else{
    lang.helloJavaScript()
  }

  return lang
}

getLanguage(Type.Strong)
上一篇下一篇

猜你喜欢

热点阅读