![](/img/trans.png)
[英]@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.