• home > webfront > ECMAS > typescript >

    typescript一些基础性反直觉的东西总结性笔记

    Author:zhoulujun Date:

    typescript一些不那么容易直观理解的部分 归集


    &不是“交集”

    我们直观感受是,当看到&时,我们要得到一个交集。例如:

    集合运算图解

    但是,typescript里面的 &取的是并集


    interface A {
      name: string;
      age: number;
    }
    
    interface B {
      name: string;
      weight: number;
    }

    我们直观感受是,A&B -> interface C { name: string },然而,事实

    interface D {
      name: string;
      age: number;
      weight: number;
    }



    此extends非彼extends

    TS中的extends和JS里面的extends形式相同概念不同。

    interface Animal {
      name: string;
    }
    
    interface Snake extends Animal {
      length: number;
    }
    // Snake是在Animal的基础上增加了length字段。我们可以换一种写法:
    type Snake = Animal & {
      length: number,
    }

    两者在语义上是有差别的,虽然结果上一致。

    extends在TS中,代表着从一个类型扩展出另外一个新类型,这个新类型是原来这个类型的子类型。同时,extends在TS中具有条件属性,它用于判断一个类型是否是另外一个类型的子类型:

    type Some = A extends B ? C : D

    在这一意义上,TS和JS中的extends具有完全不同的性质。

    • JS中extends代表继承(inherit)

    • TS中extends就是它的字面意思“扩展”




    转载本站文章《typescript一些基础性反直觉的东西总结性笔记》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/typescript/2021_0901_8674.html