javascript - Typescript 中的条件 super() 语句
问题描述
我有一个由 super() 实例化的类。在 super() 中,我想根据某些条件发送参数。但是如果我将 if 语句放在 super() 之前,打字稿会给出编译错误,说 super() 必须是第一个语句。有什么办法可以根据条件实现超类的加载。
这是不起作用的代码。我想根据某些条件在 super() 中传递/阻止依赖项参数(ENGINE_MODEL)。知道如何实现这一目标吗?
代码:
export class CreateChrStructureNodeControlComponent extends StructureNodeControl {
constructor(private changeRequestCreateService: CreateChangeRequestService) {
if(some condition = 'SF') //my logic
super(changeRequestCreateService,
PLANT,
ENGINE_MODEL);
else
super(changeRequestCreateService,
PLANT)
;
}
}
超类:
export class StructureNodeControl extends BaseTypeaheadControl<TypeahaedLookupTableItem> {
constructor(changeRequestCreateService: CreateChangeRequestService, ...dependencies: string[]) {
super(STRUCTURE_NODE,
changeRequestCreateService.getStructureNodes,
TypeahaedLookupTableItem,
...dependencies);
}
解决方案
只需将超级参数从 varargs 字符串数组更改为常规的旧字符串数组,然后您可以有条件地将依赖项添加到该数组并过滤掉禁用的那些。
即将超类更改为:
export class StructureNodeControl extends BaseTypeaheadControl<TypeahaedLookupTableItem> {
constructor(changeRequestCreateService: CreateChangeRequestService, dependencies: string[]) {
super(STRUCTURE_NODE,
changeRequestCreateService.getStructureNodes,
TypeahaedLookupTableItem,
...dependencies);
}
然后在你的子类中:
export class CreateChrStructureNodeControlComponent extends StructureNodeControl {
constructor(private changeRequestCreateService: CreateChangeRequestService) {
super(changeRequestCreateService,
[
PLANT,
some_logic === 'SF' ? ENGINE_MODEL : null
].filter(Boolean) // get rid of the nulls
);
}
推荐阅读
- arrays - 如何在 shell 脚本中显示两个文件之间不同的前五行?
- selenium - 如何在机器人框架中添加月份日期并以日期格式返回
- firebase - 将数据保存到 Firebase 用户对象
- asp.net-mvc - 如何修复 IIS 上的 HTTP 请求走私
- python - 作为 Keras 模型输入的列表列表
- mysql - Laravel 查询生成器:按 id 连接表和分组
- python - 在 Python 中分隔日期
- c# - 在 rabbitmq .net 实现中,当消费者关闭或消费者连接丢失时,如何通知生产者?
- shell - AppleScript:shell 脚本之间的延迟
- c# - 嵌套值列表 XML Linq C#