为何TypeScript中对象解构会触发“不安全数组解构”错误?
问题分析与解决
这不是TypeScript的bug,而是**@typescript-eslint规则的误判**(具体是no-unsafe-assignment规则的错误提示)。
问题原因
你写的是标准的对象解构{ value, done },但ESLint的@typescript-eslint/no-unsafe-assignment规则内部逻辑存在疏漏:它错误地将IteratorResult类型的对象解构,识别成了数组解构操作,进而触发了“不安全数组解构”的错误提示。
你的第二种写法不报错,是因为没有使用解构,规则没有触发针对解构操作的检测逻辑,并非代码本身有差异。
解决方案
你可以选择以下任意一种方式解决:
- 临时禁用该行规则:在解构代码行上方添加注释,跳过规则检测
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { value, done }: IteratorResult<ServiceLabel> = iterator.next(); - 升级@typescript-eslint版本:该问题属于规则的已知bug,升级到最新稳定版的
@typescript-eslint/eslint-plugin和@typescript-eslint/parser后,误判情况会被修复 - 改用先存变量再取值的写法:也就是你已经验证过的第二种写法,绕开规则的误判逻辑
代码验证
你的代码本身没有逻辑疏漏,两种写法的运行逻辑完全一致,区别仅在于是否使用解构,而规则的误判只针对解构场景。
内容的提问来源于stack exchange,提问作者Josías Genem
相关产品推荐
相关产品推荐

