我试图从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不再抱怨找不到类型了。现在是双赢的局面:)


我有一个类似的错误,但对我来说,这是反应路由器。通过为它安装类型来解决它。

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。将noImplicitAny设置为false。


此外,如果您试图使用的包有自己的类型文件,并且在包中列出了它,则此错误将得到修复。Json类型属性

像这样:

{
  "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
}

一个更俗气的方法是加上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 install --save @types/react-redux

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

npm init 安装-g webpack NPM install——save react react-dom @types/react @types/react-dom NPM install——保存-dev typescript awesome-typescript-loader source-map-loader NPM安装ajv@^6.0.0 NPM I react-html-id import UniqueId from 'react-html-id';

我做了上面的(虽然我已经安装了npm),它工作!


对于我的情况,问题是类型没有被添加到包。为了修复它,我运行了npm install——save-dev @types/react-redux,注意——save-dev


我在使用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"]
}

工作很好

npm install @types/react-materialize

如果你正在使用的模块没有@types/<package>,你可以通过在上面添加// @ts-ignore注释来轻松规避这个问题。

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

或者你也可以创建下面缺少的@types/<package>:

声明文件发布

我可以如何贡献


当我使用typescript添加react-router-dom到新的CRA应用程序时,我有这个问题。在我添加@types/react-router后,这个问题得到了修复。


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

无法找到模块“react-portal-tooltip”的声明文件。'/node_modules/react-portal-tooltip/lib/index.js'隐含有一个'any'类型。 尝试npm install @types/react-portal-tooltip,如果它存在,或者添加一个包含声明模块'react-portal-tooltip'的新声明(.d.ts)文件;ts(7016)

我先尝试了很多步骤——添加各种各样的。d。Ts文件,各种NPM安装。

但最终对我有用的是触摸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'

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

我最初认为导入'./declare_modules.d。Ts '是必要的。虽然现在看起来并不是这样!但我把这一步也算进去了以防它能帮到别人。

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


在我的情况下,我有一个react的问题,所以我开始做:

NPM install @types/react

然后是

NPM install @types/react-dom

这对我很有效


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


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

如果有人有这个错误,那么你会惊讶地发现,当使用create-react-app创建react应用程序时,它只在package.json中显示@types/react。但是如果你检查node_modules/@types文件夹,你将找不到任何react文件夹。

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


我费了好大劲才拿到的 在react应用中 会有一个react-app-env.d。SRC文件夹下的Ts文件 只要在这里声明模块

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


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

1-创建。d。Ts文件手动,你只需要做以下工作:

2 -进入SRC文件夹

3 -创建global.d.ts文件

4 -像这样声明模块:

declare module 'module-name';

我之前在这里回答过,很不错


只要为react安装必要的类型,它就应该解决这个错误。

如果你用的是纱线:

yarn add @types/react @types/react-dom @types/react-router-dom -D

如果你正在使用npm:

npm install @types/react @types/react-dom @types/react-router-dom --save-dev

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

e.g.

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

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


react-router-dom有同样的错误。

此错误发生在您正在处理typescript项目时,默认模块没有提供typescript所需的类型。

所以我在npmjs.com上搜索了一个名为@types/react-router-dom的包,如果它不是你正在寻找的react-router-dom,然后用你的untyped模块替换react-router-dom。

在npm网站上寻找最后一个版本,然后将它添加到你的包中。Json是这样的:

[...]
"dependencies": {
    [...]
    "@types/react-router-dom": "^5.1.8",
    [...]
  },
[...]

一旦完成,运行yarn install

那么它应该会摇滚起来!


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


比如这个:

{
  "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
}

此外,如果您试图使用的包有自己的类型文件,并且在包中列出了它,则此错误将得到修复。Json类型属性


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

解决方案- - - >

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


尝试npm i——save-dev @types/react-materialize(如果存在的话),或者添加一个包含声明模块'react-materialize'的新声明(.d.ts)文件;


你可以在这里找到合适的解。你只需要用“反应物质化”代替“反应物品旋转木马”。


我也遇到过同样的问题,最简单的解决办法就是

NPM I—save-dev @types/react-router-dom