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

Joy*_*Joy 39 reactjs webpack webpack-2

我正在尝试从react-materialize导入组件 -

import {Navbar, NavItem} from 'react-materialize';
Run Code Online (Sandbox Code Playgroud)

但是当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.
Run Code Online (Sandbox Code Playgroud)

任何解决方案.我不确定如何解决此import语句ts-loader与webpack一起使用.

index.js反应-兑现长相很喜欢这一点.但是如何在我自己的文件中为模块导入解决这个问题..

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

Mat*_*vic 50

如果@types/<package>您正在使用的模块没有,您可以通过在// @ts-ignore上面添加评论来轻松规避该问题,即

// @ts-ignore
import { Navbar, NavItem } from 'react-materialize';
Run Code Online (Sandbox Code Playgroud)

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

申报文件发布

绝对类型我如何贡献


Joy*_*Joy 37

对于那些想知道我是如何克服这一点的人.我做了一些黑客的东西.

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

  "typeRoots": [
            "../node_modules/@types",
            "../@types"
        ]
Run Code Online (Sandbox Code Playgroud)

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

declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
Run Code Online (Sandbox Code Playgroud)

所以现在打字稿并没有抱怨找不到的类型.:)现在胜利局面:)

  • 我错过了有关它在单独文件中的部分。好像将那些`declare`语句放在名为`index.d.ts`的文件中一样,它为我修复了它。我不必触摸typeRoots。 (2认同)
  • 还有一点值得一提:根据源的位置,您可能还需要将“../types”添加到“includes”数组中 (2认同)

Ogg*_*las 31

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

npm install --save @types/react-router
Run Code Online (Sandbox Code Playgroud)

错误:

(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.
Run Code Online (Sandbox Code Playgroud)

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

  • 或 `yarn add @types/react-router --dev` (6认同)
  • ````yarn add @types/react-router-dom```` 使用 create-react-app 时为我修复了它 (6认同)
  • 虽然目前还没有这样的 @types/react-navigation-tabs 包,但仍然提到的 `"noImplicitAny": false,` 确实禁用了它(我因为使用​​react-native init MyProject --template typescript而遇到了这个问题,我至少这么认为) (4认同)

sin*_*ina 28

确保在执行以下操作后停止您的本地反应服务器并重新启动它:

1-.d.ts手动创建 文件,您只需要执行以下操作:

2 - 输入 src folder

3 - 创建global.d.ts文件

4 - 在其中声明模块,如:

declare module 'module-name';
Run Code Online (Sandbox Code Playgroud)

我之前在这里回答过,很好

  • 如果执行上述操作后仍然无法正常工作,请确保停止您的反应本地服务器并重新启动它。`npm 启动` (2认同)

小智 27

就我而言,我的反应有问题,所以我开始做:

npm install @types/react

然后到

npm install @types/react-dom

这对我有用

  • 即使它们已经安装,重新运行这些命令也为我解决了问题。 (2认同)

Moh*_*nji 21

只需为反应安装必要的类型,它应该可以解决错误。

如果您使用纱线:

yarn add @types/react @types/react-dom @types/react-router-dom -D
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 npm:

npm install @types/react @types/react-dom @types/react-router-dom --save-dev
Run Code Online (Sandbox Code Playgroud)


Jac*_*bec 16

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

"noImplicitAny": false
Run Code Online (Sandbox Code Playgroud)

例:

{
  "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"]
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是一个黑客,虽然这解决了问题,但是这个问题有任何有效且永久的解决方案吗? (7认同)
  • 使用 Typescript 在 VSC 上完美工作并进行 React (2认同)
  • 这是一个非常糟糕的做法,因为“any”类型只会忽略 Typescript linting。那么有什么意义呢?这是向普通 javascript 的倒退,而不是使用 Typescript。对我来说,以下答案解决了这个问题,并且被认为更好:/sf/ask/2902391061/#回答-62194561 (2认同)

小智 7

我有同样的问题,但不一定与打字稿有关,所以我在这些不同的选项上有点挣扎。我正在使用一个特定的模块制作一个非常基本的 create-react-appreact-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";
Run Code Online (Sandbox Code Playgroud)

并在src/App.js

import ToolTip from 'react-portal-tooltip';
// import './declare_modules.d.ts'
Run Code Online (Sandbox Code Playgroud)

我在不同的位置使用这个通用的“声明模块”策略(我是一个初学者)有点挣扎,所以我认为这将适用于不同的选项,但我包含了对我有用的路径。

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

这是我的第一个 stackoverflow 答案,所以我为这里分散的过程道歉,希望它仍然有帮助!:)

  • 这真的很简洁。谢谢。保持良好的工作! (2认同)

小智 7

与 发生同样的错误react-router-dom

当您处理打字稿项目时,会发生此错误,默认模块不附带打字稿所需的类型。

因此,我在 npmjs.com 上搜索了一个名为“@types/react-router-dom如果它不是您要查找的react-router-dom”的包,然后将其替换react-router-dom为您的非类型化模块。

在 npm 网站上查找最新版本,然后将其添加到您的中,package.json如下所示:

[...]
"dependencies": {
    [...]
    "@types/react-router-dom": "^5.1.8",
    [...]
  },
[...]
Run Code Online (Sandbox Code Playgroud)

完成后,运行yarn install

那么它应该摇滚!

  • 您还可以将其添加到“devDependency”中:`“devDependency”:{“@types/react-router-dom”:“^ 5.1.8”}` (2认同)

小智 6

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


Sol*_*eil 5

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

import './path/declare_modules.d.ts';
Run Code Online (Sandbox Code Playgroud)

declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
Run Code Online (Sandbox Code Playgroud)

declare_modules.d.ts

它有效,但我认为其他解决方案更好。


Tun*_*Tun 5

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

npm install --save @types/react-redux
Run Code Online (Sandbox Code Playgroud)


Ger*_*oke 5

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

如果有人遇到此错误,那么您会惊讶地发现在创建 react 应用程序时create-react-app,它只显示@types/reactpackage.json. 但是,如果您查看node_modules/@types文件夹内部,您将找不到任何react.

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

  • 你解释得对:) (2认同)

归档时间:

查看次数:

79805 次

最近记录:

6 年,7 月 前