我试图从react-materialize导入组件

import {Navbar, NavItem} from 'react-materialize';

但是当webpack编译我的.tsx时,它会为上面的-抛出一个错误

ERROR in ./src/common/navbar.tsx
(3,31): error TS7016: Could not find a declaration file for module 'react-materi
alize'. 'D:\Private\Works\Typescript\QuickReact\node_modules\react-materialize\l
ib\index.js' implicitly has an 'any' type.

有什么解决办法吗?我不确定如何解析此导入语句以使用ts-loader和webpack。

react-materialize的index.js是这样的。但是我如何解决这个模块导入在我自己的文件?

https://github.com/react-materialize/react-materialize/blob/master/src/index.js


当前回答

对于那些想知道我是如何克服这些的人。我做了一些hack的东西。

在我的项目中,我创建了一个名为@types的文件夹,并将其添加到tsconfig中。Json来找到所有需要的类型。所以它看起来像这样

"typeRoots": [
  "../node_modules/@types",
  "../@types"
]

在里面我创建了一个名为alltypes。d。ts的文件。从中找出未知类型。所以对我来说,这些是未知的类型,我把它加在那里。

declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';

现在typescript不再抱怨找不到类型了。现在是双赢的局面:)

其他回答

一个更俗气的方法是加上eg。,在引导。TSX线

import './path/declare_modules.d.ts';

with

declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';

在declare_modules.d.ts

这是可行的,但在我看来,其他解决方案更好。

如果你在使用npm react时遇到问题,请安装——save @types/reactnpm install——save @types/react

尝试添加到tsconfig。"noImplicitAny": false 为我工作

如果您只想为不可用类型的节点模块声明类型,则可以使用这些注释。

解决方案- - - >

在SRC目录中创建一个global.d.ts文件。 因为typescript已经监视SRC目录了 因此,我们避免在tsconfig中显式声明。Json也可以加载特定类型的文件,因为在这样做的时候,我们其他默认的输入位置可能会被覆盖

可能在某些情况下,某些依赖项没有类型,ts会强制您为此包含类型。有一种变通方法可以解决这个问题,那就是使用javascript。

e.g.

import {Charts} from "react-charts";//error:无法找到模块'react-charts'的声明文件。

const ReactChart = require("react-charts");/ /没有错误