Javascript 在Typescript中扩展与交叉
在CopyScript中的扩展就像C++中的继承。 Typescript中的交集表示新对象将Javascript 在Typescript中扩展与交叉,javascript,typescript,Javascript,Typescript,在CopyScript中的扩展就像C++中的继承。 Typescript中的交集表示新对象将 拥有相交类的所有成员 使用extends时为什么需要交叉点 关键字我们可以在中获取两个类的所有成员 派生类 交叉口扩展的用例是什么 你不喜欢吗 它们的工作原理非常相似,但有一些不同之处: extends只能用于具有静态已知成员的类型: type SimpleType={x:string}; 接口SimpleInterface扩展SimpleType{}//ok 类型ComplexType={x:stri
拥有相交类的所有成员 使用extends时为什么需要交叉点
关键字我们可以在
中获取两个类的所有成员 派生类 交叉口扩展的用例是什么 你不喜欢吗
它们的工作原理非常相似,但有一些不同之处:
extends
只能用于具有静态已知成员的类型:type SimpleType={x:string};
接口SimpleInterface扩展SimpleType{}//ok
类型ComplexType={x:string}{x:number};
//错误:接口只能扩展对象类型或对象类型与静态已知成员的交集。
接口复杂接口扩展复杂类型{}
类型交叉是一种通用类型操作,可在任意两种类型上执行,并将给出结果<代码>扩展仅限于接口和类似接口的类型(和类)
接口父级{
x:字符串|编号;
}
接口Child1扩展了父接口{
x:string;//确定
}
接口Child2扩展了父接口{
x:string | number | boolean;//错误
}
但是,类型交叉口并不抱怨:
type IntersectedChild=Parent&{x:string | boolean};//好啊
//IntersectedChild将具有作为交集的属性“x”
//“string | number”和“string | boolean”的组合,即“string”:
键入IntersectedChildX=IntersectedChild['x'];//一串
扩展时,子类实际上将继承其父类的所有实现;然而,类型交叉只在类型级别起作用,因此如果您有类A
和B
和type C=A&B
,C
不是一个类,而只是一个类型,您将需要以某种方式手动构造一个满足C
约束的对象(具有相同可见性级别的A和B的所有成员)
下面是我上面举的例子。阅读关于继承与组合的内容。交集是构成交集的每个集合的子集。不是超集。交集类型没有构成交集类型的某些类型的成员。您只能扩展接口和类,这意味着在大多数情况下,您无法选择选择一个或另一个。继承遵循OOP规则,而组合遵循更多的理论规则,因此它们的行为会有所不同,非常感谢您。