[英]@typescript-eslint/no-unsafe-assignment: Unsafe assignment of an any value
[英]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);
}
然后類型檢查器將能夠區分string
和string[]
。
但是,您隨后將其存儲在您已明確鍵入為string | string[]
的變量中。 string | string[]
,因此當您隨后嘗試使用errorMessage
時,類型檢查器仍然會對類型感到困惑。 從errorMessage
中刪除類型注釋,或將其更改為string
。
最后,對於您的特定用例,這可能不是問題,但如果axiosError
的message
字段是空數組,則可能存在錯誤。 類型檢查器將斷言您有一個數組,但是當您嘗試在運行時訪問它的值時,它將返回為undefined
。 在你的情況下這可能是可以接受的,但我不知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.