typescript - 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 抑制错误,代码就可以正常工作。但我真的不喜欢那样。
抱歉,如果缺少示例/问题代码 - 如果需要,我会详细说明或详细说明。
解决方案
推荐阅读
- html - 是否可以设置最大字体和最小字体并在缩放时做出响应?
- angular - 在 ionic 3 中点击 One Signal 推送通知时如何导航到特定页面?
- sql-server - 如何在 MS SQL Server 中获取服务器触发器定义?
- .htaccess - SSL_ERROR_BAD_CERT_DOMAIN
- gcc - Makefile g++ lrt 问题。找不到lrt
- java - 使用 @Factory TestNG 时将参数传递给 dataProvide
- r - 如何停止 url.exists()?
- post - 具有基本身份验证的 WebviewScaffold - 如何使用参数发布请求
- ios - 如何制作自定义共享操作表
- apache-spark - 数据集上的过滤操作失败,出现熟悉的错误“AnalysisException:无法解析给定的输入列”