【问题标题】:With eslint-plugin-flowtype, how to check if a type exist使用 eslint-plugin-flowtype,如何检查类型是否存在
【发布时间】:2017-07-13 14:18:35
【问题描述】:

我在一个 React 项目中启用了 eslint-plugin-flowtype 和 Flow。它运作良好,但并不完美。例如,我有错误 Missing return type annotation. (flowtype/require-return-type) 因缺少返回类型而引发。但是当我写一个未知类型时我没有错误。例如,写入{dispatch: TotoType} 不会引发任何错误(TotoType 未声明)。

为了更清楚:

我的问题是,如果我编写了一个不存在的类型(我的意思是 nomber 而不是 number),Flowtype eslint 插件不会返回任何错误。每当我使用它时都应该触发该错误,但事实并非如此:(。如果我在我的文件上使用 Flow CLI,我会收到类似unknown Type 的错误。我想让 FlowType ESlint 插件检测相同的错误。

我正在使用提供这些规则的eslint-config-evenium 配置文件:

{
    ...
    "rules": {

        "flowtype/boolean-style": [
            2,
            "boolean"
        ],
        "flowtype/define-flow-type": 1,
        "flowtype/delimiter-dangle": [
            2,
            "never"
        ],
        "flowtype/generic-spacing": [
            2,
            "never"
        ],
        "flowtype/no-primitive-constructor-types": 2,
        "flowtype/no-weak-types": 0,
        "flowtype/object-type-delimiter": [
            2,
            "comma"
        ],
        "flowtype/require-parameter-type": 2,
        "flowtype/require-return-type": [
            2,
            "always",
            {
                "annotateUndefined": "never",
                "excludeArrowFunctions": true  
            }
        ],
        "flowtype/require-valid-file-annotation": 2,
        "flowtype/semi": [
            2,
            "always"
        ],
        "flowtype/space-after-type-colon": [
            2,
            "always"
        ],
        "flowtype/space-before-generic-bracket": [
            2,
            "never"
        ],
        "flowtype/space-before-type-colon": [
            2,
            "never"
        ],
        "flowtype/type-id-match": [
            2,
            "^([A-Z][a-z0-9]+)+Type$"
        ],
        "flowtype/union-intersection-spacing": [
            2,
            "always"
        ],
        "flowtype/use-flow-type": 1,
        "flowtype/valid-syntax": 1
    },
    "settings": {
        "flowtype": {
            "onlyFilesWithFlowAnnotation": true
        }
    }
}

如何让 ESlint 为未经授权的类型生成错误? 如果可能的话,我会很感激能够将不存在的类型添加到授权类型列表中。

任何人都知道如何做到这一点,或者是否有可能?

【问题讨论】:

  • 一点也不。您分享的主题讨论了对不返回流类型的函数进行 linting。我的问题是,如果我编写一个不存在的类型(我的意思是 nomber 而不是 number),Flowtype eslint 插件不会返回任何错误。当我从不使用它时应该触发该错误,但事实并非如此:(。如果我在我的文件上使用 Flow CLI,我会收到类似unknown Type 的错误。我想让 FlowType ESlint 插件检测相同的错误。
  • 问题的根源在于您期望 eslint-plugin-flowtype 实际运行 Flow,但它并没有这样做。如果不运行 Flow,它无法判断哪些类型存在,哪些不存在。
  • 谢谢。你指出了显而易见的,我认为你是对的!我不知道 ESLint 在不运行 Flow 的情况下如何做到这一点^^。我知道我的 VSCode Flow 插件运行一个 Flow 服务器来突出显示 Flow 代码错误。但我从来没有想过 ESlint 插件没有。

标签: eslint flowtype


【解决方案1】:

eslint-plugin-flowtype 仅验证用于编写流类型代码的语法。它根本不运行 Flowtype。

要让 Flowtype 在您的代码上运行,您可以使用多种解决方案:

  • 使用flow-bin在命令行中启动Flow
  • 使用flow-bin + gulp 创建一个将启动 Flow 服务器的任务:

例如:

gulp.task('flow', () => {
  execFile(flow, ['status'], (err, stdout) => {
    console.log(stdout);
  });
});
  • 使用gulp-flowtype。它与之前的解决方案 (flow-bin + gulp) 类似,只是 gulp 进程可以被阻止等待 Flowtype 服务器启动,并且您可以在 gulp 进程结束时停止 Flowtype 服务器。
  • 使用 IDE 中的 Flowtype。您的 IDE 已经可以提供它(又名 Nuclide),或者您可以找到现有的插件。例如,我在 VSCode 中使用 flow-for-vscode

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2021-03-22
    • 1970-01-01
    • 2012-03-27
    • 2018-05-09
    • 2021-10-18
    • 2013-09-15
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多