A的类型注释缺失。A是在函数类型中声明的类型参数

时间:2019-02-12 07:44:52

标签: node.js react-native react-redux expo flowtype

我有以下代码:

import { combineReducers } from 'redux';
import planeReducer from './plane/reducer';

export default combineReducers({
    planes: planeReducer
});

在运行时可以正常运行:

> expo start

然后,当我使用以下命令运行flow时:

>  npm run flow

我收到以下流错误:

Missing type annotation for A. A is a type parameter declared in function type [1] and was implicitly instantiated at
call of combineReducers [2].

     src/store/index.js
      1| import { combineReducers } from 'redux';
      2| import planeReducer from './plane/reducer';
      3|
 [2]  4| export default combineReducers({
      5|        planes: planeReducer
      6| });
      7|

     flow-typed/npm/redux_v4.x.x.js
 [1] 56|   declare export function combineReducers<O: Object, A>(reducers: O): CombinedReducer<$ObjMap<O, <S>(r: Reducer<S, any>) => S>, A>;

然后,当我通过添加以下内容来修改上面的代码时:<any, any>,如下所示:

import { combineReducers } from 'redux';
import planeReducer from './plane/reducer';

export default combineReducers<any, any>({
    planes: planeReducer
});

当我像以前一样再次运行flow时,flow错误消失了,但是如果我再次运行:

> expo start

我收到以下运行时错误:

[01:30:16] Your app is running at exp://192.168.1.194:19000
Logs for your project will appear below. Press Ctrl+C to exit.
[01:30:16] SyntaxError: D:\react-navigation-header-issue\src\store\index.js: Unexpected token, expected ";" (4:34)
[01:30:16]   2 | import planeReducer from './plane/reducer';
[01:30:16]   3 |
[01:30:16] > 4 | export default combineReducers<any, any>({
[01:30:16]     |                                   ^
[01:30:16]   5 |        planes: planeReducer
[01:30:16]   6 | });
[01:30:16]   7 |

关于如何正确修改代码以解决flow错误并同时保持应用程序无错误运行的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

请尝试在文件的第一行中添加@flow杂注注释。可能与通天塔问题有关:https://github.com/babel/babel/issues/9240

修改: 有undocumented all option in flow-strip-typesbabel-preset-expo在内部使用)。

您需要在babel配置中将其覆盖:

overrides: [{
    plugins: [
        ['@babel/plugin-transform-flow-strip-types', {all: true}],
    ]
}]