web-dev-qa-db-ja.com

文字列を割り当てる方法| TypeScriptの文字列に未定義ですか?

文字列である変数を割り当てたい|次のように、未定義の文字列変数に:

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":文字列のパラメーターには割り当てられません。 "newserial":文字列; } '

SelectedSerialForReplace()関数を変更して他のものを返すことができません。手伝っていただけませんか?

7
Sohrab

TypeScriptコンパイラは厳密なnullチェックを実行します。つまり、stringを期待するメソッドに_string | undefined_変数を渡すことはできません。

これを修正するには、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});
}
_
12
Acevail

シリアルがundefinedでなかったと確信している場合は、 !後置演算子

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