React + typescript + webpack和ui-router-react

时间:2017-03-01 23:59:58

标签: reactjs typescript webpack url-routing

我一直关注var grid = document.getElementsByClassName('box'); function changeColor(item) { item.addEventListener('click', function() { this.style.background = 'black'; }); }; grid.forEach(function(el) { changeColor(el); }); 文档(https://ui-router.github.io/react/)我在webpack编译代码库时遇到很多问题

ui-router-react
当我收到这些错误时,

进入app.tsx:

import {UIRouter, UIView, UISref, UISrefActive, pushStateLocationPlugin} from 'ui-router-react';

我认为在我的ERROR in [at-loader] node_modules/ui-router-core/lib/common/common.d.ts:388:31 TS7006: Parameter 'a' implicitly has an 'any' type. ERROR in [at-loader] node_modules/ui-router-core/lib/common/common.d.ts:388:34 TS7006: Parameter 'b' implicitly has an 'any' type. ERROR in [at-loader] node_modules/ui-router-core/lib/resolve/resolveContext.d.ts:7:22 TS7005: Variable 'NATIVE_INJECTOR_TOKEN' implicitly has an 'any' type. ERROR in [at-loader] node_modules/ui-router-core/lib/transition/transitionHook.d.ts:13:37 TS7006: Parameter 'error' implicitly has an 'any' type. ERROR in [at-loader] src/components/loginComponent.tsx:23:33 TS2314: Generic type 'KeyboardEvent<T>' requires 1 type argument(s). ERROR in [at-loader] src/components/loginComponent.tsx:32:31 TS2314: Generic type 'KeyboardEvent<T>' requires 1 type argument(s). 网络包中并不是要考虑webpack.config.js,但显然是。{/ p>

这是分支reactRouting下的repo链接

https://github.com/JMStudiosJoe/ReactPractice/tree/reactRouting

3 个答案:

答案 0 :(得分:1)

看起来这些错误是ui-router-react的输入生成方式的结果。

如果您查看,请说出node_modules\ui-router-core\lib\common\common.d.ts文件。\,行388,您会看到这个

export declare type sortfn = (a, b) => number;

如您所见,ab没有类型信息关联。他们。如果您手动编辑此行,使其看起来像

export declare type sortfn = (a: any, b: any) => number;

前两个编译错误将消失。如果转到您提供的错误列表中的每个文件/行并执行相同的操作,您的项目将编译。

现在,它当然是一种临时措施,真正的类型应该是any之外的其他类型。这个(即打字)应由包裹的作者确定。但是,以这种方式编辑类型定义文件将暂时取消阻止。

答案 1 :(得分:1)

有一个问题,但当解决方案在tsconfig文件中时,我正在查看webpack配置。您可以设置"noImplicitAny": false选项以消除任何错误

  

进入app.tsx就是我得到这些错误:[at-loader]中的错误node_modules / ui-router-core / lib / common / common.d.ts:388:31 TS7006:参数&#39; a& #39;隐含地有一个“任何”的类型。

     

[at-loader]中的错误node_modules / ui-router -core / lib / common / common.d.ts:388:34 TS7006:参数&#39; b&#39;隐含地有一个“任何”的类型。   [at-loader]中的错误node_modules / ui-router-core / lib / resolve / resolveContext.d.ts:7:22 TS7005:Variable&#39; NATIVE_INJECTOR_TOKEN&#39;隐含地有一个“任何”的类型。

     

[at-loader]中的错误node_modules / ui-router-core / lib / transition / transitionHook.d.ts:13:37 TS7006:参数&#39;错误&#39;隐含地有一个“任何”的类型。

要摆脱其他错误,需要操纵我的React函数参数类型

usernameValidator = (event: React.KeyboardEvent => {

更改为

usernameValidator = (event: React.ChangeEvent<HTMLInputElement>) => {

修复了最后两期。

答案 2 :(得分:1)

我建议不要将"noImplicitAny"设置为true,因为在您自己的代码库中,它非常有用,可确保您充分利用Typescript(类型检查)的强大功能之一。

您的问题是您的打字稿转换器正在处理您的node_modules库。而且你并不是真的想要这样,因为你信任你的第三方图书馆。

最简单的方法是在excludehttps://www.typescriptlang.org/docs/handbook/tsconfig-json.html)中添加tsconfig.json字段

如果您的tsconfig.json位于根文件夹,并且您的node_modules文件夹相同,则可以添加:{/ p>

"exclude": [
    "node_modules"
]

而且......那就是它!