打字稿反应-找不到模块“ react-materialize”的声明文件。'path / to / module-name.js'隐式具有任何类型


110

我正在尝试从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-loaderwebpack一起使用。

index.js反应-Materialise的长相很喜欢这一点。但是如何解决此问题的模块导入到我自己的文件中..

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


2
您需要安装软件包的类型/类型(npm install @ types / react-materialize)。但是,它似乎尚不存在,因此您可能需要自己创建它。我发现这篇文章有帮助- templecoding.com/blog/2016/03/31/...
牛逼米切尔

@T Mitchell这样是否意味着我们缺少任何类型的类型,如果不创建这些类型,我们将永远无法编译Webpack?应该有什么办法吗?
乔伊


对我来说,这似乎是一种解决方法。
SuperUberDuper

Answers:


81

我有一个类似的错误,但对我来说是react-router。通过安装它的类型来解决它。

npm install --save @types/react-router

错误:

(6,30): error TS7016: Could not find a declaration file for module 'react-router'. '\node_modules\react-router\index.js' implicitly has an 'any' type.

如果您想在站点范围内禁用它,可以编辑tsconfig.json并设置noImplicitAnyfalse


1
虽然目前还没有这样的@类型/反应导航,标签封装可是还是有提到"noImplicitAny": false,并禁用它(我得到了,因为使用的这个问题反应本土的init MyProject的--template打字稿,我这么认为至少)👍
顶部-Master

1
yarn add @types/react-router --dev
奥马尔·塔里克

65

对于那些想知道我如何克服这个问题的人。我做了些骇人听闻的事情。

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

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

在其中,我创建了一个名为的文件alltypes.d.ts。从中查找未知类型。所以对我来说,这些是未知类型,我在那边添加了它。

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

所以现在打字稿不再抱怨找不到的类型了。:)现在赢赢局面:)


3
我错过了有关它放在单独文件中的部分。好像将这些declare语句放在一个文件中index.d.ts,对我来说,它已修复。我不必触摸typeRoots。
Scotty Wagoner

效果很好,但是在require 用于其他东西(例如图像)时会引起问题。基本上,它只是不允许您使用require任何东西。
Dhruvdutt Jadhav

1
此解决方案不再适用于最新的TS。nvalid module name in augmentation. Module 'some-dumb-lib-with-no-types' resolves to an untyped module at '/path/to/module', which cannot be augmented.
FlavorScape

2
还值得一提的是:根据源的位置,您可能还需要在“ includes”数组中添加“ ../types”
netpoetica

1
我在react-countdown-clock创建@types文件夹时遇到了问题,并完成了上述所有步骤。仍然出现相同的错误。
Jyothu

48

我在react-redux类型上遇到了同样的问题。最简单的解决方案是添加到tsconfig.json:

"noImplicitAny": false

例:

{
  "compilerOptions": {
    "allowJs": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "isolatedModules": true,
    "jsx": "react",
    "lib": ["es6"],
    "moduleResolution": "node",
    "noEmit": true,
    "strict": true,
    "target": "esnext",
    "noImplicitAny": false,
  },
  "exclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js"]
}

这伟大的工作IntelliJIDE,但自定义typeRoots方法(这是公认的答案)中所做的工作,甚至VS CodeIDE
顶级大师

6
我认为这是一个hack,尽管这可以解决问题,但是是否有针对此问题的有效且永久的解决方案?
Pardeep Jain

我认为这是解决此问题的最佳方法,我认为在每一个抛出err的软件包中npm都不可行
Gilbert R.

34

如果没有@types/<package>您正在使用的模块,则可以通过在// @ts-ignore上面添加注释来轻松地解决此问题,即

// @ts-ignore
import { Navbar, NavItem } from 'react-materialize';

或者,您可以创建@types/<package>以下内容:

申报文件发布

确定输入我该如何贡献


1
该软件包@types尚无可用的BTW。在存储库上创建了一个问题... github.com/geelen/react-snapshot/issues/131
doublejosh

21

就我而言,我在反应上遇到了问题,所以我开始做:

npm install @types/react

然后到

npm install @types/react-dom

这对我有用


1
即使已经安装了很困难的软件,重新运行这些命令也为我解决了这个问题。
heringer

基本上,当您重新运行命令时,它将更新您现有的软件包。这就是解决问题的原因。
Anant Lalchandani

7

您需要做的就是运行以下脚本。然后,卸下/重新安装要使用的模块。

npm install --save @types/react-redux

1
似乎没有可用的@ types / react-materialize
RonLugge

6

react-router-dom使用打字稿添加到新的CRA应用程序时遇到了这个问题。添加后@types/react-router,问题已解决。


安装此后该怎么办?
Pardeep Jain

6

我遇到了同样的问题,但不一定与打字稿有关,所以我在这些不同的选项上有些挣扎。我正在使用一个特定的模块制作一个非常基本的create-react-app,react-portal-tooltip,得到类似的错误:

找不到模块“ react-portal-tooltip”的声明文件。“ /node_modules/react-portal-tooltip/lib/index.js”隐式具有“ any”类型。尝试npm install @types/react-portal-tooltip是否存在该文件或添加包含declare module 'react-portal-tooltip';ts(7016)的新声明(.d.ts)文件

我首先尝试了许多步骤-添加了各种 .d.ts文件,各种npm安装。

但是,最终的工作对我来说是touch src/declare_modules.d.ts 那么src/declare_modules.d.ts

declare module "react-portal-tooltip";

并在src/App.js

import ToolTip from 'react-portal-tooltip';
// import './declare_modules.d.ts'

我在不同的位置上使用通用的“声明模块”策略有些挣扎(我是一个初学者),所以我认为这可以使用不同的选项,但是我包括了一些可行的方法。

我最初认为import './declare_modules.d.ts'是必要的。虽然现在好像不是!但是我包括了一步,以防它对某人有所帮助。

这是我的第一个stackoverflow答案,因此我为此处分散的程序表示歉意,希望它对您有所帮助!:)


2
这真的很简洁。谢谢。保持良好的工作!
Cubelaster

4

另外,如果您尝试使用的程序包具有其自己的类型文件并将其列在package.json中,则此错误将得到修复 typings属性中

像这样:

{
  "name": "some-package",
  "version": "X.Y.Z",
  "description": "Yada yada yada",
  "main": "./index.js",

  "typings": "./index.d.ts",

  "repository": "https://github.com/yadayada.git",
  "author": "John Doe",
  "license": "MIT",
  "private": true
}

3

一种更hacky的方法是在boot.tsx中添加以下行

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

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

declare_modules.d.ts

它可以工作,但其他解决方案更好。


3

我所做的是在项目文件夹目录中的nodejs命令提示符下运行以下命令:

  1. npm init
  2. npm install -g webpack
  3. npm install --save react react-dom @types/react @types/react-dom
  4. npm install --save-dev typescript awesome-typescript-loader source-map-loader
  5. npm install ajv@^6.0.0
  6. npm i react-html-id
  7. 通过添加以下代码将包(在节点模块中)导入App.js文件中: import UniqueId from 'react-html-id';

我做到了以上(尽管我已经安装了npm)并且它起作用了!


1

找不到模块'react / jsx-runtime'的声明文件

如果有人遇到此错误,那么您会惊讶地发现使用创建反应应用时create-react-app,它仅显示@types/reactpackage.json。但是,如果您在node_modules/@types文件夹中进行检查,则不会找到的任何文件夹react

解决方案是完全清除node_modules文件夹并重新安装-npm install或可以单独安装模块- npm install @types/react


0

就我而言,问题是类型没有被添加到devDependencies下的package.json文件中以对其进行修复,我npm install --save-dev @types/react-redux注意到--save-dev


0

尝试添加到tsconfig.json文件:"noImplicitAny": false 对我有用


1
这样做基本上是在禁用TypeScript提供的所有功能。为什么不只使用常规JS?
马特·鲁

0

我在很多麻烦之后得到了它在react app中,src文件夹中将有一个react-app-env.d.ts文件,只是在那里声明模块

/// <reference types="react-scripts" />
declare module 'react-color/lib/components/alpha/AlphaPointer'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.