【问题标题】:How to assign string | undefined to string in TypeScript?如何分配字符串 |在 TypeScript 中未定义为字符串?
【发布时间】:2017-12-24 23:38:44
【问题描述】:

我想分配一个变量,它是字符串 |未定义,到一个字符串变量,如您在此处看到的:

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 |不明确的;新闻:任何; }' 是 不可分配给'{“serial”类型的参数:字符串; “新闻”: 细绳; }'

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

【问题讨论】:

  • 请尝试使用可重现的代码改进您的minimal reproducible exampleluminaireReplaceLuminaire背后的逻辑是什么?它应该接受未定义的“串行”参数吗?

标签: javascript typescript undefined aurelia


【解决方案1】:

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});
}

【讨论】:

  • 旁注,在检查undefined 以捕获null 时使用!= 也很重要。 null == undefinedtruenull === undefinedfalse
【解决方案2】:

如果您确定序列号不是undefined,您可以使用! post-fix operator

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

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多