如何在TypeScript中将字符串 | undefined 分配给字符串?

41
我想将一个字符串|未定义的变量分配给一个字符串变量,就像您在这里看到的一样:
private selectedSerialForReplace(): string | undefined {
    return this.selectedSerials.pop();
  }

luminaireReplaceLuminaire(params: {  "serial": string; "newserial": string; }, options?: any): FetchArgs {
............
}

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace(), newserial: response.output});

我遇到了这个错误:

类型为“{ serial: string | undefined; newserial: any; }”的参数无法分配给类型“{ "serial": string; "newserial": string; }”

我不能更改selectedSerialForReplace()函数以返回其他内容。你能帮我吗?


请尝试使用可重现的代码改进您的[MCVE]。luminaireReplaceLuminaire背后的逻辑是什么?它是否应该接受未定义的“serial”参数? - E net4
2个回答

40

typescript编译器执行严格的null检查,这意味着您不能将一个string | undefined变量传递给期望一个string的方法。

要解决此问题,在调用luminaireReplaceLuminaire()之前,必须对undefined执行显式检查。

在您的示例中:

private selectedSerialForReplace(): string | undefined {
    return this.selectedSerials.pop();
}

luminaireReplaceLuminaire(params: {  "serial": string; "newserial": string; }, options?: any): FetchArgs {
    ............
}

const serial = this.selectedSerialForReplace();
if(serial !== undefined) {
    luminaireReplaceLuminaire({serial, newserial: response.output});
}

7
附注:在检查“undefined”时使用“!=”很重要,以便捕捉到“null”。 “null == undefined”为“true”,“null === undefined”为“false”。 - Dagrooms

37

如果你确定串口不可能是undefined,那么可以使用!后缀运算符

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace()!, newserial: response.output});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接