首页 > 解决方案 > Cypress/TypeScript 和可选或未定义的方法参数

问题描述

作为一名 Java 和 Kotlin 开发人员(好吧,几乎没有……但仍然如此),我已经习惯了在方法参数方面相当好的灵活性。我在 TypeScript 中为此苦苦挣扎,我想知道是我自己还是 TS 在该功能上有点稀疏?

我有调用代码,它要么将随机枚举值分配给变量,要么将其保留为“未定义”。然后我试图将此变量传递给一个方法。此方法仅在分配时才应获取 Enum 值;如果不是,它应该是“未定义的”,因为它将根据值(或非值)处理数据。

枚举(导入):

export type BoformEnum = 'SALG' | 'UTLEIE';
export const BoformEnum = {
    SALG: ('salg') as BoformEnum,
    UTLEIE: ('utleie') as BoformEnum
};

export type FinansieringsProdukterEnum = 'OPPFORING' | 'KJOP' | 'OMBYGGING' | 'OPPGRADERING' | 'TILSKUDDUTLEIE';
export const FinansieringsProdukterEnum = {
    OPPFORING: _('OPPFORING') as FinansieringsProdukterEnum,
    KJOP: _('KJOP') as FinansieringsProdukterEnum,
    OMBYGGING: _('OMBYGGING') as FinansieringsProdukterEnum,
    OPPGRADERING: _('OPPGRADERING') as FinansieringsProdukterEnum,
    TILSKUDDUTLEIE: _('TILSKUDDUTLEIE') as FinansieringsProdukterEnum
};

调用代码:

let avtaletype = undefined;

if (boform == BoformEnum.UTLEIE) {
  avtaletype = this.getRandomKommuneAvtaletype(formal);
}

this.setFormal(formal, boform, avtaletype);

方法:

setFormal(formal: FinansieringsProdukterEnum,
        boform: BoformEnum,
        avtaletype?: KommuneavtaleTypeKodeEnum
    ....
}

现在,这行不通。我已经尝试了“?”的所有变体。在方法参数之后,以及“!” 在方法调用中,但我遇到了这个错误:

TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 
'KommuneavtaleTypeKodeEnum'.   Type 'undefined' is not assignable to type   
'KommuneavtaleTypeKodeEnum'.

但是,如果我只是在调用代码中插入“未定义”,而不是传递可能是“未定义”的变量,它可以工作:

this.setFormal(formal, boform, undefined);

这只是我,还是我必须以不同的方式解决(使用 if 之类的东西,我总是喜欢避免)?

当然,重要的一点是:如果我用@ts-ignore 抑制错误,代码就可以正常工作。但我真的不喜欢那样。

抱歉,如果缺少示例/问题代码 - 如果需要,我会详细说明或详细说明。

标签: typescriptenumsundefinedcypress

解决方案


推荐阅读