javascript - 类继承中的打字稿元组,丢失类型
问题描述
我如何用元组覆盖类数组并在索引中添加本机实例并保留类型?
我怎样才能使它有效,正确的语法是什么?
操场:操场
class Base {
protected children?:Base[]
}
class Containers extends Base {
protected override children:Array<Containers|Primitives>;
}
class Primitives extends Base {
}
class A extends Containers {
// so children should automaticly someting like : [A,A,B,...Containers|Primitives] ?
protected override children:[A,A,B]
init(){
const i0 = this.children[0];
const i1 = this.children[1];
const i2 = this.children[2];
const i3 = this.children[3]; // should Containers|Primitives|undefined because extends Containers ?
}
}
class B extends Containers {
}
所以在这段代码中,A 可以在索引中有本地实例children
,我使用 getter 。但是......其余的children
应该自动继承父母Containers|Primitives
吗?
编辑:我知道我可以这样写!
protected override children:[A,...Array<Containers|Primitives>]
但是我从父类重复代码,有没有避免重复的好方法?
解决方案
class Base {
protected children?: Base[]
}
class Containers extends Base {
// let say, container entity can have childrens (Containers|Primitives)
protected override children: Array<Containers | Primitives> = [];
}
class Primitives extends Base {
}
class A extends Containers {
// Let say A have some native instance in children [A,A,B,...Containers|Primitives]
protected override children: [A, A, B, ...Containers[] | Primitives[]] = [new A(), new A(), new B()];
init() {
const i0 = this.children[0];
const i1 = this.children[1];
const i2 = this.children[2];
const i3 = this.children[3]; // // Primitives | Containers
}
}
class B extends Containers {
}
您需要使用传播语法
[A,A,B,...Containers|Primitives]
无法编译,因为您...
只能与数组一起使用
children
在其自己的初始化程序中直接或间接引用,因此需要显式类型注释
推荐阅读
- php - $_SESSION superglobal 被意外清空
- spring-boot - 从另一个(父)应用程序检索 Spring-Boot 中的用户/会话信息
- javafx - 如何将 TableColumn 设置为所需的宽度?
- c++ - Qt C++:QFile 不会在 WriteOnly 中打开 *.txt 资源
- java - 在 Java 中通过反射获取私有字段
- c# - 如何强制 Oracle DB 提供结果?
- javascript - 将'yymmdd'格式的日期字符串转换为'MM-DD-YYYY'
- xamarin - 适用于 iOS 和 Android 的 Xamrine.forms 中的条件编译
- javascript - 保存并复制动态创建的 html从一个 DOM 到另一个 DOM 的框(不是框的 .value)?
- python-3.x - 气流测试任务有效,但在 dag 中运行失败