我试图从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不再抱怨找不到类型了。现在是双赢的局面:)
此外,如果您试图使用的包有自己的类型文件,并且在包中列出了它,则此错误将得到修复。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
}
我在使用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"]
}
我也有同样的问题,但不一定与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-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
那么它应该会摇滚起来!
比如这个:
{
"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类型属性