【问题标题】:How to disable warnings from @typescript-eslint?如何禁用来自@typescript-eslint 的警告?
【发布时间】:2022-01-24 22:51:32
【问题描述】:

下面是我的代码:

interface DeleteRecipeFunctionContext {
  handleRecipeDelete: (id: string | number) => void;
}

const RecipeContext = createContext<DeleteRecipeFunctionContext>({
  handleRecipeDelete: (id) => null, // eslint-disable-line no-unused-vars
});

createContext 要求我传入一个默认函数,所以我在传入实际函数之前传入一个 (id)=>null 作为虚拟占位符。我收到来自@typescript-eslint 的警告:

'id' is defined but never used  @typescript-eslint/no-unused-vars

写// eslint-disable-warning/no-unused-vars 不会禁用警告,但eslint-disable-warning 会。我应该如何在不关闭所有警告的情况下关闭此警告?另一方面,我使用 createContext 的方法是否正确(输入虚拟函数)?

【问题讨论】:

    标签: typescript eslint


    【解决方案1】:

    要选择性地禁用插件规则生成的警告,请使用语法

    // eslint-disable-line <plugin>/<rule>
    

    在你的情况下:

      handleRecipeDelete: (id) => null, // eslint-disable-line @typescript-eslint/no-unused-vars
    

    我不知道您创建上下文的方法是否正确,这需要您在应用程序中进行测试。

    【讨论】:

      【解决方案2】:

      禁用警告应该是最后的选择。这里有几个选择:

      1. 丢弃参数:

        handleRecipeDelete: (_) => null
        
      2. 省略参数:

        handleRecipeDelete: () => null
        
      3. 一个更强大的选择是让你的上下文可以为空。

        const RecipeContext = createContext<DeleteRecipeFunctionContext | undefined>();
        

        并在访问上下文时进行空值检查,通常在自定义挂钩中完成:

         function useRecipeContext() {
           const context = useContext(RecipeContext);
           if (!context) {
             throw new Error("Missing RecipeContext.Provider value");
           }
           return context;
         }
        

      【讨论】:

      • 1 返回相同的错误(_ 已定义但从未使用)。对于 2,我定义了 handleRecipeDelete 来接受字符串或数字类型的 id,删除参数不会违反打字稿规则吗?
      • 3 只需稍作改动即可工作(必须传入 undefined 作为默认参数) 但是为了满足默认要求似乎需要做很多工作,这是唯一的方法吗?
      • @Samson 我认为 eslint 规则接受 #1 但可能不接受 TS。 #2 应该没问题,因为该函数尊重接受参数(例如忽略它)并且什么都不返回的合同。就像返回 null 和 undefined 一样,但 void 不在乎。
      • @Samson #3 是我的建议。每次接口更改时,它的工作量都比管理默认值要少,而且当您尝试在测试中访问上下文但未定义时,该错误很有用。
      【解决方案3】:

      您可以在函数上方添加// @ts-ignore

      【讨论】:

      • 这不起作用
      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2017-07-26
      • 2019-07-03
      • 2018-06-01
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多