美文网首页
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