Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Typescript中扩展与交叉_Javascript_Typescript - Fatal编程技术网

Javascript 在Typescript中扩展与交叉

Javascript 在Typescript中扩展与交叉,javascript,typescript,Javascript,Typescript,在CopyScript中的扩展就像C++中的继承。 Typescript中的交集表示新对象将 拥有相交类的所有成员 使用extends时为什么需要交叉点 关键字我们可以在中获取两个类的所有成员 派生类 交叉口扩展的用例是什么 你不喜欢吗 它们的工作原理非常相似,但有一些不同之处: extends只能用于具有静态已知成员的类型: type SimpleType={x:string}; 接口SimpleInterface扩展SimpleType{}//ok 类型ComplexType={x:stri

在CopyScript中的扩展就像C++中的继承。 Typescript中的交集表示新对象将
拥有相交类的所有成员

使用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规则,而组合遵循更多的理论规则,因此它们的行为会有所不同,非常感谢您。