私はreact-materializeからコンポーネントをインポートしようとしています-
import {Navbar, NavItem} from 'react-materialize';
しかし、Webパックが.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
これをどうやって克服したか知りたい人のために。ハックのようなことをしました。
プロジェクト内で@Types
というフォルダーを作成し、tsconfig.jsonに追加して、そこからすべての必要なタイプを見つけました。だからこのように見える-
"typeRoots": [
"../node_modules/@types",
"../@types"
]
そしてその中にalltypes.d.ts
というファイルを作成しました。それから未知のタイプを見つけるために。私にとってこれらは未知のタイプであり、私はそこにそれを追加しました。
declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
だから今TypeScriptはもう見つからないタイプについて文句を言いませんでした。 :)今勝ち勝ち状況:)
同様のエラーが発生しましたが、私にとっては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
を編集し、noImplicitAny
をfalse
に設定します。
反応還元型についても同じ問題がありました。最も簡単な解決策は、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 --save @types/react-redux
Tsconfig.jsonで、"noImplicitAny": false
を設定してこれを修正しました
私がやったことは、プロジェクトフォルダディレクトリでnodejsコマンドプロンプトから次のコマンドを実行しました:
npm init
npm install -g webpack
npm install --save react react-dom @types/react @types/react-dom
npm install --save-dev TypeScript awesome-TypeScript-loader source-map-loader
npm install ajv@^6.0.0
npm i react-html-id
import UniqueId from 'react-html-id';
私は上記を行いましたが(すでにnpmがインストールされていました)、それはうまくいきました!
また、使用しようとしているパッケージに独自のタイプファイルがある場合、このエラーは修正されますandpackage.jsontypings
属性
そのようです:
{
"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
}
よりハックな方法は、たとえばboot.tsxに次の行を追加することです
import './path/declare_modules.d.ts';
と
declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
declare_modules.d.ts
動作しますが、他のソリューションの方がIMOの方が優れています。
使用しているモジュールに@types/<package>
がない場合、// @ts-ignore
を追加することで問題を簡単に修正できます。
// @ts-ignore
import { render } from 'react-snapshot';
または、次のように欠落している@types/<package>
を作成できます。
私の場合、問題はdevDependenciesの下のpackage.jsonファイルにタイプが追加されないことでした。 npm install --save-dev @types/react-redux
--save-dev
に注意してください
うまくいく
npm install @types/react-materialize