繁体   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