Typoskript reagieren - Es konnte keine Deklarationsdatei für das Modul '' reagieren-materialisieren '' gefunden werden. 'path / to / module-name.js' hat implizit einen beliebigen Typ


99

Ich versuche Komponenten aus React-Materialise zu importieren als -

import {Navbar, NavItem} from 'react-materialize';

Aber wenn das Webpack meine erstellt .tsx, wird ein Fehler für die oben genannten als - ausgelöst.

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.

Eine Lösung dafür. Ich bin nicht sicher, wie ich diese Importanweisung für die Arbeit mit ts-loaderund das Webpack auflösen soll.

Das index.jsvon React-Materialise sieht so aus. Aber wie kann ich das für den Modulimport in meinen eigenen Dateien beheben?

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


2
Sie müssen die Typisierungen / Typen für das Paket installieren (npm install @ types / react-materialise). Es sieht jedoch so aus, als ob dies noch nicht existiert. Daher müssen Sie es möglicherweise selbst erstellen. Ich fand diesen Artikel hilfreich - TempleCoding.com/blog/2016/03/31/…
T Mitchell

@T Mitchell bedeutet das also, dass alle Arten von Typen, die uns fehlen, wir niemals in der Lage wären, ein Webpack zu kompilieren, ohne dass diese Typen erstellt würden? Es sollte einen Weg geben?
Joy


Dies scheint mir eine Art Workaround zu sein.
SuperUberDuper

Antworten:


73

Ich hatte einen ähnlichen Fehler, aber für mich war es react-router. Es wurde behoben, indem Typen dafür installiert wurden.

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 zu deaktivieren Website möchten breit können Sie stattdessen bearbeiten tsconfig.jsonund Satz noImplicitAnyzu false.


Obwohl es derzeit noch kein solches Paket für @ types / react-navigation-tabs gibt, wurde es dennoch von den genannten "noImplicitAny": false,deaktiviert (ich habe dieses Problem aufgrund der Verwendung des reaktionsnativen init MyProject --template typescript, zumindest glaube ich) 👍
Top -Master

1
oderyarn add @types/react-router --dev
Omar Tariq

58

Für diejenigen, die wissen wollten, wie ich das überwunden habe. Ich habe ein paar Sachen gemacht.

In meinem Projekt habe ich einen Ordner namens erstellt @typesund ihn zu tsconfig.json hinzugefügt, um alle erforderlichen Typen daraus zu finden. So sieht es ungefähr aus -

  "typeRoots": [
            "../node_modules/@types",
            "../@types"
        ]

Und darin habe ich eine Datei namens erstellt alltypes.d.ts. Um die unbekannten Typen daraus zu finden. Für mich waren dies die unbekannten Typen und ich habe sie dort hinzugefügt.

declare module 'react-materialize';
declare module 'react-router';
declare module 'flux';

Das Typoskript beschwerte sich nun nicht mehr über die nicht mehr gefundenen Typen. :) Win Win Situation jetzt :)


3
Ich habe den Teil darüber in einer separaten Datei verpasst. Scheint, als würde ich diese declareAnweisungen in eine Datei mit dem Namen index.d.tsFix für mich einfügen. Ich musste typeRoots nicht berühren.
Scotty Waggoner

Das funktioniert gut, verursacht aber Probleme bei der Verwendung require für andere Dinge wie Bilder. Grundsätzlich erlaubt es Ihnen einfach nicht, requirefür irgendetwas zu verwenden.
Dhruvdutt Jadhav

1
Diese Lösung funktioniert nicht mehr mit den neuesten TS. nvalid module name in augmentation. Module 'some-dumb-lib-with-no-types' resolves to an untyped module at '/path/to/module', which cannot be augmented.
FlavorScape

2
Erwähnenswert: Abhängig vom Standort Ihrer Quelle müssen Sie möglicherweise auch "../types" zu Ihrem Array "include" hinzufügen
netpoetica

1
Ich habe Probleme mit react-countdown-clock, habe einen @typesOrdner erstellt und alle oben genannten Schritte ausgeführt. immer noch den gleichen Fehler bekommen.
Jyothu

44

Ich hatte das gleiche Problem mit React-Redux-Typen. Die einfachste Lösung war das Hinzufügen zu tsconfig.json:

"noImplicitAny": false

Beispiel:

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

Dies funktionierte hervorragend in IntelliJIDE, aber die benutzerdefinierte typeRootsMethode (die akzeptierte Antwort ist) funktionierte sogar in VS CodeIDE
Top-Master

4
Ich denke, dies ist ein Hack, obwohl dies das Problem gelöst hat, aber gibt es eine gültige und dauerhafte Lösung für dieses Problem?
Pardeep Jain

Ich denke , dass dies die beste Lösung für dieses Problem ist, ich glaube nicht , es rentabel ist i jedes Paket NPM, die die err wirft
Gilbert R.

30

Wenn @types/<package>für das von Ihnen verwendete Modul keine vorhanden ist , können Sie das Problem leicht umgehen, indem Sie oben einen // @ts-ignoreKommentar hinzufügen, z

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

Alternativ können Sie @types/<package>Folgendes erstellen :

Veröffentlichung von Deklarationsdateien

Definitiv getippt, wie kann ich dazu beitragen


1
Für dieses Paket ist noch kein @typesBTW verfügbar. Erstellt ein Problem auf dem Repo ... github.com/geelen/react-snapshot/issues/131
doublejosh

17

In meinem Fall hatte ich ein Problem mit der Reaktion, also fing ich an:

npm install @types/react

und dann zum

npm install @types/react-dom

Das hat bei mir funktioniert


Selbst wenn sie bereits installiert waren, löste das erneute Ausführen dieser Befehle das Problem für mich.
Heringer

Grundsätzlich werden Ihre vorhandenen Pakete aktualisiert, wenn Sie die Befehle erneut ausführen. Das war der Grund, warum das Problem gelöst ist.
Anant Lalchandani

7

Alles was Sie tun müssen, ist das folgende Skript auszuführen. Entfernen Sie dann das Modul, das Sie verwenden möchten, und installieren Sie es erneut.

npm install --save @types/react-redux

1
Es scheint kein @ types / react-materialise verfügbar zu sein
RonLugge

6

Ich hatte dieses Problem, als ich react-router-domdie neue CRA-App mit Typoskript hinzufügte . Nachdem ich hinzugefügt hatte @types/react-router, wurde das Problem behoben.


Was tun nach der Installation?
Pardeep Jain

5

Ich hatte das gleiche Problem, aber nicht unbedingt in Bezug auf Typoskript, also hatte ich ein bisschen Probleme mit diesen verschiedenen Optionen. Ich mache eine sehr einfache Create-React-App mit einem bestimmten Modul react-portal-tooltip,, bei dem ein ähnlicher Fehler auftritt:

Es konnte keine Deklarationsdatei für das Modul 'react-portal-tooltip' gefunden werden. '/node_modules/react-portal-tooltip/lib/index.js' hat implizit einen 'any'-Typ. Versuchen Sie, npm install @types/react-portal-tooltipob es existiert, oder fügen Sie eine neue Deklarationsdatei (.d.ts) hinzu, die declare module 'react-portal-tooltip';ts (7016) enthält.

Ich habe zuerst viele Schritte ausprobiert - verschiedene .d.tsDateien hinzufügen , verschiedene npm-Installationen.

Aber was schließlich für mich funktionierte, war touch src/declare_modules.d.ts dann in src/declare_modules.d.ts:

declare module "react-portal-tooltip";

und in src/App.js:

import ToolTip from 'react-portal-tooltip';
// import './declare_modules.d.ts'

Ich hatte ein wenig Probleme mit den verschiedenen Standorten, um diese allgemeine Strategie zum Deklarieren von Modulen zu verwenden (ich bin ein Anfänger), daher denke ich, dass dies mit verschiedenen Optionen funktionieren wird, aber ich habe Pfade für das, was mir funktioniert hat, eingeschlossen.

Ich hielt import './declare_modules.d.ts'es anfangs für notwendig. Obwohl es jetzt so scheint, als wäre es nicht so! Aber ich schließe den Schritt ein, falls es jemandem hilft.

Dies ist meine erste Stackoverflow-Antwort, daher entschuldige ich mich für den verstreuten Prozess hier und hoffe, dass er immer noch hilfreich war! :) :)


2
Das ist wirklich ordentlich und einfach. Vielen Dank. Mach weiter so!
Cubelaster

4

Dieser Fehler wird auch behoben, wenn das Paket, das Sie verwenden möchten , über eigene Typdateien verfügt und diese im Attribut package.json aufgeführt sind typings

Wie so:

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

3

Ein hackigerer Weg ist es, z. B. 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 IMO besser.


3

Ich habe die folgenden Befehle an der Eingabeaufforderung von nodejs ausgeführt, während ich mich im Projektordnerverzeichnis befand:

  1. npm init
  2. npm install -g webpack
  3. npm install --save react react-dom @types/react @types/react-dom
  4. npm install --save-dev typescript awesome-typescript-loader source-map-loader
  5. npm install ajv@^6.0.0
  6. npm i react-html-id
  7. Importieren Sie das Paket (in Knotenmodulen) in die Datei App.js, indem Sie den folgenden Code hinzufügen: import UniqueId from 'react-html-id';

Ich habe das oben genannte gemacht (obwohl ich bereits npm installiert hatte) und es hat funktioniert!


0

Für meinen Fall war die Frage , dass die Typen zu package.json Datei wurden nicht unter hinzugefügt bekommen devDependencies es zu beheben Ich lief npm install --save-dev @types/react-reduxdie Notiz--save-dev


0

Versuchen Sie, zur Datei tsconfig.json hinzuzufügen: "noImplicitAny": false hat bei mir funktioniert


Auf diese Weise deaktivieren Sie im Grunde alle von TypeScript bereitgestellten Funktionen. Warum nicht einfach reguläres JS verwenden?
Matt Ruwe vor

-2

funktioniert gut

npm install @types/react-materialize

3
Es gibt keine Typen für die Reaktion - materialisieren
katzmopolitan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.