代码之家  ›  专栏  ›  技术社区  ›  machineghost

Typescript:@ts忽略不处理未重新分配的Let变量?

  •  0
  • machineghost  · 技术社区  · 2 年前

    背景(请随意跳过问题)

    我正试图破坏阿波罗号的回应 useLazyQuery ,然后更改一个变量。如果没有Typescript,它将是两行简单的代码:

     let [someFunction, { data, loading }] = useLazyQuery(QUERY);
     data = 'whatever'
    

    然而,这冒犯了Typescript,因为我正在生成所有的变量 let 尽管大多数不会改变。所以,我把代码改为destrucure 最 的响应为常数,只有一个例外:

     const stuff = useLazyQuery(QUERY);
     let [_, { data }] = stuff; // get one variable as a non-constant
     const [someFunction, { loading }] = stuff; // get the rest as constants
    

    问题是,我仍然收到TypeScript错误/警告:

    77:8警告“_”被分配了一个值,但从未使用过未使用的变量

    77:8永远不会重新分配错误“_”。使用“const”而不是首选const

    当然 _ 只是一个占位符,可以帮助我销毁 data ,所以不应该重新分配。。。但在 允许 线使破坏工作。

    问题

    我本以为我可以告诉Typescript“别担心 _ ,忽略它”,添加 @ts-ignore 评论:

     const stuff = useLazyQuery(QUERY);
     // @ts-ignore
     let [_, { data }] = stuff; // get one variable as a non-constant
     const [someFunction, { loading }] = stuff; // get the rest as constants
    

    但所做的只是添加一个关于我应该如何使用的新警告 @ts-expect-error 而不是 @ts忽略 …它并没有消除关于我的警告/错误 _ 变量

    问题(两个相关问题)

    1. 我想 @ts忽略 忽略了下一行的所有警告/错误;有人能解释一下Typescript是如何决定哪些警告/错误的吗 @ts忽略 实际上忽略了,哪一个没有?

    2. 有人能解释一下我是如何让Typescript停止抱怨的吗 '_' is never reassigned. Use 'const' instead 错误(使用 @ts忽略 或其他任何东西)。。。而不放弃像destructuring这样的基本语言功能?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Tushar Shahi    2 年前

    澄清一下:以上错误来自es lint,而不是TS本身。 您需要禁用它。

    您可以使用:

    // eslint-disable-next-line
     let [_, { data }] = stuff; 
    

    或

     let [_, { data }] = stuff; // eslint-disable-line
    
    推荐文章