我正在尝试配置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;
的检查类型?
答案 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语句的代码在语法上是否正确。它实际上并不进行流式验证。