Ich versuche Komponenten aus Reagieren zu importieren als -
import {Navbar, NavItem} from 'react-materialize';
Aber wenn das Webpack meinen .tsx
zusammenstellt, wirft es einen Fehler für das obige als -
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.
Jede Lösung für dieses Problem. Ich bin nicht sicher, wie diese Importanweisung aufgelöst werden kann, um mit ts-loader
und Webpack zu arbeiten.
Der index.js
von reag-materialise sieht so aus. Aber wie löse ich das für den Modulimport in meinen eigenen Dateien ..
https://github.com/react-materialize/react-materialize/blob/master/src/index.js
Für diejenigen, die wissen wollten, wie ich das überwunden habe. Ich habe so was wie ein Hack gemacht.
In meinem Projekt habe ich einen Ordner mit dem Namen @Types
erstellt und dieser Datei tsconfig.json hinzugefügt, um alle erforderlichen Typen daraus zu finden. So sieht es ungefähr so aus -
"typeRoots": [
"../node_modules/@types",
"../@types"
]
Und darin habe ich eine Datei mit dem Namen alltypes.d.ts
erstellt. Um die unbekannten Typen daraus zu finden. Für mich waren dies die unbekannten Typen und ich habe es dort hinzugefügt.
declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
Nun beschwerte sich das TypeScript nicht mehr über die nicht mehr gefundenen Typen. :) Win-Situation jetzt gewinnen :)
Ich hatte einen ähnlichen Fehler, aber für mich war es react-router
. Gelöst durch die Installation von Typen.
npm install --save @types/react-router
Error:
(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.
Wenn Sie es siteweit deaktivieren möchten, können Sie stattdessen tsconfig.json
bearbeiten und noImplicitAny
auf false
setzen.
Ich hatte das gleiche Problem mit React-Redux-Typen. Die einfachste Lösung wurde zu tsconfig.json hinzugefügt:
"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"]
}
Sie müssen lediglich das folgende Skript ausführen. Entfernen Sie dann das Modul, das Sie verwenden möchten, und installieren Sie es erneut.
npm install --save @ types/react-redux
In tsconfig.json setzen Sie __."noImplicitAny": false
.__
Was ich getan habe, war, die folgenden Befehle von der nodejs-Eingabeaufforderung auszuführen, während Sie sich im Projektordner befinden:
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 [email protected]^6.0.0
npm i react-html-id
import UniqueId from 'react-html-id';
Ich tat das oben (obwohl ich bereits npm installiert hatte) und es hat funktioniert!
Ein hackigerer Weg ist, zB in boot.tsx die Zeile hinzuzufügen
import './path/declare_modules.d.ts';
mit
declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';
im declare_modules.d.ts
Es funktioniert, aber andere Lösungen sind besser, IMO.
Dieser Fehler wird auch behoben, wenn das Paket, das Sie verwenden möchten, seine eigene Typdatei (en) besitzt und es im Attribut package.jsontypings
aufgeführt ist
So wie:
{
"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
}
Wenn für das von Ihnen verwendete Modul kein @types/<package>
vorhanden ist, können Sie das Problem leicht beheben, indem Sie // @ts-ignore
hinzufügen, d. H.
// @ts-ignore
import { render } from 'react-snapshot';
Alternativ können Sie den fehlenden @types/<package>
wie folgt erstellen:
In meinem Fall bestand das Problem darin, dass die Typen nicht zur package.json-Datei unterdevDependencieshinzugefügt wurden. Um dies zu beheben, lief ich npm install --save-dev @types/react-redux
. Beachten Sie den --save-dev
.
funktioniert gut
npm install @types/react-materialize