类型系统

类型系统

December 24, 2022
typescript

Union type #

基于基本类型构建的新的联合类型

e.g. type C = A | B

传值时: 只能传满足 A 类型或 B 类型的值过来

对值的操作时: 需要进行 type narrow,narrow 到具体的类型后再操作,因为值可能为多种类型。除非 union 的多种类型有共性行为(有行为/属性交集)

Intersection type #

用来组合对象类型(interface), intersection 具有被组合 member 的所有属性,对已有的 interface 进行组合,生成新的类型

其他类型 #

unknown #

unkown 类型值上不允许任何操作

any #

any 类型值上允许任何操作,为所欲为

never #

函数抛异常,或者终止程序的执行

void #

函数无明确返回值类型

Type 和 Interface #

  • interface 可以通过 extends 关键字实现继承, type 通过 & 实现继承

    interface Animal {
      name: string
    }
    
    interface Bear extends Animal {
      honey: boolean
    }
    
    const bear = getBear()
    bear.name
    bear.honey
    
    type Animal = {
      name: string
    }
    
    type Bear = Animal & {
      honey: boolean
    }
    
    const bear = getBear();
    bear.name;
    bear.honey;
    
  • interface 可被重复声明,用于添加新属性, type 创建后不能再重复声明

    也就是说 type alias 不能用于声明合并

       interface Window {
         title: string
       }
    
       interface Window {
        ts: TypeScriptAPI
       }
    
       const src = 'const a = "Hello World"';
       window.ts.transpileModule(src, {});
    
  type Window = {
    title: string
  }

  type Window = {
    ts: TypeScriptAPI
  }

 // Error: Duplicate identifier 'Window'.
  • interface 只能用于描述对象,type 可以用来表示任何类型