如何分配字符串| 在TypeScript中未定义为字符串?

Soh*_*rab 4 javascript undefined typescript aurelia

我想分配一个变量,它是字符串| undefined,到一个字符串变量,如下所示:

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

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

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace(), newserial: response.output});
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

类型'{serial:string | 不确定的; newserial:any; }'不能赋值给'{"serial"类型的参数:string; "newserial":string; }"

我无法更改selectedSerialForReplace()函数以返回任何其他内容.请你帮助我好吗?

小智 8

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

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

在你的例子中:

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});
}
Run Code Online (Sandbox Code Playgroud)

  • 旁注,在检查 `undefined` 以捕获 `null` 时使用 `!=` 也很重要。`null == undefined` 是 `true`,`null === undefined` 是 `false` (3认同)

ssc*_*oof 5

如果您确定序列号不能是undefined您可以使用!后缀运算符

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace()!, newserial: response.output});
Run Code Online (Sandbox Code Playgroud)