美文网首页
TypeScript 之 类型推断 类型兼容 类型保护

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

作者: _一九九一_ | 来源:发表于2019-10-11 17:07 被阅读0次

类型推断

  • ts会自动推断写的代码是什么类型
  • 当你不需要ts自动推断类型的时候 需要用到类型断言
  • 最佳通过类型推断
  • 上下文类型推断
// 断言为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
}

类型兼容性问题

  • 当一个类型Y可以被赋值给另外一个类型X时,我们就可以说类型X兼容类型Y
  • 结构之间兼容,成员少的兼容成员多的
  • 函数之间兼容,参数多的兼容参数少的

类型保护

  • 能够在特定的区块中保证变量属于某种确定的类型
  • 可以在此区块中放心的引用此类型的属性,或者调用此类型的方法
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)

相关文章

网友评论

      本文标题:TypeScript 之 类型推断 类型兼容 类型保护

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