eslint-plugin-flowtype不验证

时间:2016-11-23 15:24:34

标签: javascript eslint flowtype

我正在尝试配置eslint + babel-eslint + eslint-plugin-react + eslint-plugin-flowtype

我在devDependencies中有以下package.json

"babel-eslint": "^7.1.1",
"eslint": "^3.10.2",
"eslint-config-airbnb": "^13.0.0",
"eslint-plugin-flowtype": "^2.25.0",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^2.2.3",
"eslint-plugin-react": "^6.7.1"

以下.eslinrc

{
  "parser": "babel-eslint",
  "plugins": [
    "flowtype"
  ],
  "extends": [
    "airbnb",
    "plugin:flowtype/recommended"
  ],
  "rules": {
    "max-len": [1, 80, 2, {"ignoreComments": true}],
    "prop-types": [0],
    "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
    "react/prefer-stateless-function": [
      0,
      {
        "ignorePureComponents": true
      }
    ],
    "no-console": 0
  },
  "settings": {
    "flowtype": {
      "onlyFilesWithFlowAnnotation": true
    }
  }
}

我在App.js中编写了简单的代码示例:

function foo() {
  const a: string = 1;
  return a;
}

async function bar() {
  const b = await foo();
  return b;
}

如果我启动eslint src/App.js,则eslint不会显示任何消息。 如果我将"flowtype/require-return-type": 2添加到.eslintrc,则eslint会显示:

error  Missing return type annotation  flowtype/require-return-type
error  Missing return type annotation  flowtype/require-return-type
✖ 2 problems (2 errors, 0 warnings)

但我不明白为什么const a: string = 1;有效。 如何启用const a: string = 1;的检查类型?

3 个答案:

答案 0 :(得分:6)

eslint-plugin-flowtype 流量。它是ESLint的扩展,它具有一系列仅与Flow的附加语法相关的lint规则。

例如,有一个rule可让您强制要求在Flow对象类型中使用逗号或分号(例如type Foo = {bar: string, baz: number} vs type Foo = {bar: string; baz: number}

但是,要实际获得类型检查,您需要安装Flow,然后按照其中的说明进行设置。简而言之,它涉及确保您的项目根目录中有.flowconfig文件,确保所有文件都有// @flow标题,然后从命令运行flow status line(或使用Nuclide或其他具有Flow支持的编辑器。)

答案 1 :(得分:1)

eslint-plugin-flowtype doesn't appear to have a rule to check that

linter-plugin的目的是强制执行文体或常规事物(例如总是注释函数返回类型),而不是检查自己的类型。

您希望运行Flow本身来检查类型是否真正正确。

答案 2 :(得分:1)

如果您想让ESLint使用Flow来验证您的代码,那么使用的正确插件是eslint-plugin-flowtype-errors

https://www.npmjs.com/package/eslint-plugin-flowtype-errors

正如其他人所写,eslint-plugin-flowtype仅验证具有FlowType语句的代码在语法上是否正确。它实际上并不进行流式验证。