TypeScript:@ts-ignore对未重赋值的let占位变量无效问题
问题解答
1. @ts-ignore 的生效逻辑
@ts-ignore 是 TypeScript 官方提供的注释,仅能忽略下一行代码中 TypeScript 自身的类型检查错误(比如类型不兼容、访问不存在的属性这类编译层面的类型问题)。
你遇到的 no-unused-vars(未使用变量)和 prefer-const(建议用const替代let)属于 ESLint 的代码规范规则警告/错误,不属于 TypeScript 类型检查的范畴,所以 @ts-ignore 对这类报错完全无效。
2. 解决 '_' is never reassigned 错误的方案
方案1:用 ESLint 专属注释精准忽略规则
直接针对这两个 ESLint 规则添加忽略注释,比 @ts-ignore 更精准:
const stuff = useLazyQuery(QUERY); // eslint-disable-next-line no-unused-vars, prefer-const let [_, { data }] = stuff; const [someFunction, { loading }] = stuff;
方案2:用空占位符避免声明无用变量
数组解构时可以直接用空占位符跳过第一个元素,不用显式声明 _,从根源上消除未使用变量的问题:
const stuff = useLazyQuery(QUERY); let [, { data }] = stuff; // 空占位符替代_,不生成无用变量 const [someFunction, { loading }] = stuff;
方案3:拆分解构,合理声明变量
更规范的写法是先把所有结果解构为常量,再单独将需要修改的 data 重新声明为 let:
const [someFunction, { data: initialData, loading }] = useLazyQuery(QUERY); let data = initialData; data = 'whatever'; // 直接修改data即可
这种写法既符合 TS 和 ESLint 的规范,也避免了冗余代码,是最推荐的方案。
内容的提问来源于stack exchange,提问作者machineghost
相关产品推荐
相关产品推荐

