使用eslint-plugin-flowtype,如何检查是否存在类型

时间:2017-02-23 07:57:45

标签: eslint flowtype

我在React项目上使用Flow启用了eslint-plugin-flowtype。它工作得很好,但并不完美。我有例如因缺少返回类型而引发的错误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为未经授权的类型生成错误? 如果可能的话,我将很高兴能够将未列出的类型添加到列表中的授权类型。

任何人都知道如何做到这一点,或者甚至可能吗?

1 个答案:

答案 0 :(得分:0)

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),或者您可以找到现有的插件。例如,我将flow-for-vscode与VSCode一起使用。