react-redux 类型文件中的 TypeScript 错误

Posted

技术标签:

【中文标题】react-redux 类型文件中的 TypeScript 错误【英文标题】:TypeScript errors in react-redux typings file 【发布时间】:2016-10-09 10:32:44 【问题描述】:

TypeScript 编译器在 react-redux 类型文件中报告错误,即使我已经排除了 tsconfig 中的类型目录。

TypeScript 版本:1.8.10

这是我遇到的错误

/home/me/dev/proj/typings/main/ambient/react-redux/index.d.ts 中的错误 (64,16):错误 TS2314:通用类型“调度”需要 1 个类型参数。

/home/me/dev/proj/typings/main/ambient/react-redux/index.d.ts 中的错误 (68,21):错误 TS2314:通用类型“ActionCreator”需要 1 个类型参数。

/home/me/dev/proj/typings/main/ambient/react-redux/index.d.ts 中的错误 (95,13):错误 TS2314:通用类型“存储”需要 1 个类型参数。

typings.json:


    "ambientDependencies": 
        "es6-shim": "registry:dt/es6-shim#0.31.2+20160602141504",
        "material-ui": "registry:dt/material-ui#0.15.0+20160602140214",
        "query-string": "registry:dt/query-string#3.0.0+20160331065456",
        "react": "github:DefinitelyTyped/DefinitelyTyped/react/react.d.ts#f407264835650f5f38d4bb2c515a79e7a835916b",
        "react-addons-css-transition-group": "registry:dt/react-addons-css-transition-group#0.14.0+20160316155526",
        "react-addons-transition-group": "registry:dt/react-addons-transition-group#0.14.0+20160417134118",
        "react-dom": "github:DefinitelyTyped/DefinitelyTyped/react/react-dom.d.ts#ca5bfe76d2d9bf6852cbc712d9f3e0047c93486e",
        "react-redux": "registry:dt/react-redux#4.4.0+20160501125835",
        "react-tap-event-plugin": "registry:dt/react-tap-event-plugin#0.0.0+20160226083632",
        "require": "registry:dt/require#2.1.20+20160316155526",
        "socket.io-client": "registry:dt/socket.io-client#1.4.4+20160317120654"
    , 
    "dependencies": 
        "es6-promise": "registry:npm/es6-promise#3.0.0+20160211003958",
        "radium": "registry:npm/radium#0.16.6+20160310030142",
        "redux-thunk": "registry:npm/redux-thunk#2.0.0+20160525185520",
        "webpack": "registry:npm/webpack#1.12.9+20160418172948"
    

tsconfig.json:


    "version": "1.8.10",
    "compileOnSave": false,
    "compilerOptions": 
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true
    ,
    "exclude": [
        "node_modules",
        "typings"
    ]

为什么它报告排除目录的错误?如何消除这些错误?

更新:

正如 Mike 在他的回答中所建议的,问题在于 react-redux 定义使用的是 redux 的 dt 定义,而不是 redux 附带的定义。为 redux 安装 dt 定义确实可以消除这些错误,但这对我来说不是一个选择,因为我自己的代码使用 redux 附带的定义文件中定义的泛型类型。

所以我真正的问题是:如何阻止 TypeScript 报告来自类型目录的文件中的错误?我认为将“类型”设置为排除目录之一会阻止这种情况,但事实并非如此。

【问题讨论】:

【参考方案1】:

看起来react-redux 的 dt 定义依赖于 dt definitions for redux,这些与 bundled with the redux npm 模块的定义不同,看起来你可能依赖它。

从 dt 安装 redux 的环境(全局)定义应该可以解决问题。

typings install dt~redux --global --save

TS 打字空间很乱。

当您为react-redux 安装 dt 类型定义时,它会剥离所有依赖项,迫使您自己安装每个依赖项,这一事实使事情变得更加混乱。

【讨论】:

感谢您的回答。是的,你是对的,但不幸的是,你建议的解决方案对我来说不是一个选择。查看我的问题中的更新 顺便说一句,从 dt 存储库安装 redux 类型的给定命令对我不起作用,我需要 >typings install redux --ambient。 听起来您使用的是 1.0 之前的版本库 github.com/typings/typings#updating-from-0x-to-10。至于您更新的问题,我想我只是更新您的代码以使用 redux 的 dt 类型,否则您将没有 react-redux 的类型或任何其他依赖于 dt redux 类型的 redux lib 类型。跨度>

以上是关于react-redux 类型文件中的 TypeScript 错误的主要内容,如果未能解决你的问题,请参考以下文章

react 中的 redux 和react-redux的区别分析

将 Typescript 与 React-Redux 一起使用时出现类型错误

如何使用 react-redux 调试 action.type 问题,单动作类型单减速器,但无法识别类型

react-redux,使用一个操作从两个输入字段中更改对象键/值

带有 Typescript 和 react-redux 的有状态组件:“typeof MyClass”类型的参数不可分配给 Component 类型的参数

找不到模块“react-redux”的声明文件。