簡體   English   中英

Any 值三元運算符的不安全賦值

[英]Unsafe assignment of an Any value ternary operator

我對打字稿有疑問,以及如何使用聯合類型使其工作。 目前我有這個代碼:

   const message: string | string[] = (axiosError as Error).message
    const errorState: string | string[] = Array.isArray(message)
      ? message[0]
      : message

我得到的問題是在 errorStat 變量中,我知道原因,這是因為我試圖訪問 message[0] 並且它可以是字符串類型並且里面沒有數據。 我知道我總是在消息中獲得價值。

有什么幫助嗎?

謝謝!

有很多地方會發生這種情況。

最大的一個是Array.isArray和其他回答者的isArray類型保護只斷言給定類型是否為any[] ,而不是任何特定的T[] 如果類型保護失敗,類型檢查器肯定知道類型是string 但如果它通過了,類型檢查器只知道它是any[]並且無法找出除此之外的任何內容。

相反,如果你有這個類型保護:

function isTypedArray<T>(val: T | T[]): val is T[] {
    return isArray(val);
}

然后類型檢查器將能夠區分stringstring[]

但是,您隨后將其存儲在您已明確鍵入為string | string[]的變量中。 string | string[] ,因此當您隨后嘗試使用errorMessage時,類型檢查器仍然會對類型感到困惑。 errorMessage中刪除類型注釋,或將其更改為string

最后,對於您的特定用例,這可能不是問題,但如果axiosErrormessage字段是空數組,則可能存在錯誤。 類型檢查器將斷言您有一個數組,但是當您嘗試在運行時訪問它的值時,它將返回為undefined 在你的情況下這可能是可以接受的,但我不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM