2017-07-19 67 views
0

我想分配一個變量,它是string |不確定的,給一個字符串變量,因爲你在這裏看到:如何分配字符串|未定義在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}); 

我得到這個錯誤:

Argument of type '{ serial: string | undefined; newserial: any; }' is not assignable to parameter of type '{ "serial": string; "newserial": string; }'

我不能改變selectedSerialForReplace()函數返回任何東西。你可以幫我嗎?

+0

請儘量使用可重複的代碼來提高你的[MCVE。 'luminaireReplaceLuminaire'背後的邏輯是什麼?它應該接受未定義的「串行」參數嗎? –

回答

5

的打字稿編譯器執行嚴格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}); 
} 
-1

更改爲PARAMS luminaireReplaceLuminair爲以下:

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

如果您確信串行不能undefined可以使用! post-fix operator

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