首页 > 解决方案 > 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);
    }

标签: javascriptangulartypescript

解决方案


只需将超级参数从 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
   );
}

推荐阅读