typescript一些基础性反直觉的东西总结性笔记
Author:zhoulujun Date:
&不是“交集”
我们直观感受是,当看到&时,我们要得到一个交集。例如:
但是,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