Maszynopis reagować - nie można znaleźć pliku deklaracji dla modułu „Reaguj-materializuj”. „ścieżka / do / nazwa-modułu.js” niejawnie ma dowolny typ


110

Próbuję zaimportować komponenty z Re-materialize jako -

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

Ale kiedy webpack kompiluje mój .tsx, generuje błąd dla powyższego, ponieważ -

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.

Wszelkie rozwiązania tego problemu. Nie jestem pewien, jak rozwiązać tę instrukcję importu, aby działała z ts-loaderpakietem internetowym.

Tak index.jswygląda reakcja materializacji. Ale jak rozwiązać ten problem w przypadku importu modułu w moich własnych plikach ...

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


2
Musisz zainstalować typy / typy dla pakietu (npm install @ Types / React-materialize). Jednak wygląda na to, że jeszcze nie istnieje, więc może być konieczne utworzenie go samodzielnie. Ten artykuł był pomocny - templecoding.com/blog/2016/03/31/…
T Mitchell

@T Mitchell, czy to oznacza, że ​​brakuje nam typów, których nigdy nie bylibyśmy w stanie skompilować bez tworzenia tych typów? Powinien być jakiś sposób?
Joy


wydaje mi się to trochę obejściem.
SuperUberDuper

Odpowiedzi:


81

Miałem podobny błąd, ale dla mnie był react-router. Rozwiązałem to, instalując dla niego typy.

npm install --save @types/react-router

Błąd:

(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.

Jeśli chcesz, aby wyłączyć OBSZARU szeroki Zamiast tego można edytować tsconfig.jsoni zestaw noImplicitAnydo false.


1
Chociaż obecnie nie ma jeszcze takiego pakietu @ types / aware-navigation-tabs, to wspomniany wyżej "noImplicitAny": false,go wyłączył (dostałem ten problem z powodu użycia react-native init MyProject - maszynopis szablonu, przynajmniej tak mi się wydaje) 👍
Góra -Master

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

65

Dla tych, którzy chcieli wiedzieć, jak to przezwyciężyłem. Zrobiłem coś w rodzaju hackowania.

W moim projekcie utworzyłem folder o nazwie @typesi dodałem go do tsconfig.json, aby znaleźć w nim wszystkie wymagane typy. Więc wygląda to trochę tak -

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

Wewnątrz utworzyłem plik o nazwie alltypes.d.ts. Aby znaleźć z niego nieznane typy. więc dla mnie były to nieznane typy i dodałem to tam.

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

Więc teraz maszynopis nie narzekał na typy, których już nie znaleziono. :) wygraj sytuację wygrywaj teraz :)


3
Brakowało mi części o tym, że jest w osobnym pliku. Wygląda na to, że umieszczenie tych declareinstrukcji w pliku o nazwie index.d.tsnaprawiło to za mnie. Nie musiałem dotykać opcji TypeRoots.
Scotty Wagoner

Działa to dobrze, ale powoduje problemy podczas używania require do innych rzeczy, takich jak obrazy. Zasadniczo po prostu nie pozwala ci używać requiredo niczego.
Dhruvdutt Jadhav

1
to rozwiązanie nie działa już z najnowszymi 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
Coś, o czym warto również wspomnieć: w zależności od lokalizacji źródła może być konieczne dodanie „../types” do tablicy „include”
netpoetica

1
Mam problemy z react-countdown-clockutworzeniem @typesfolderu i wykonałem wszystkie powyższe kroki. nadal pojawia się ten sam błąd.
Jyothu

48

Miałem ten sam problem z typami reakcyjno-redukującymi. Najprostsze rozwiązanie zostało dodane do tsconfig.json:

"noImplicitAny": false

Przykład:

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

to działało świetnie w IntelliJIDE, ale niestandardowa typeRootsmetoda (która jest akceptowaną odpowiedzią) działała nawet w VS CodeIDE
Top-Master

6
Myślę, że to hack, chociaż to rozwiązało problem, ale czy istnieje jakieś ważne i trwałe rozwiązanie tego problemu?
Pardeep Jain

Myślę, że to najlepsze rozwiązanie tego problemu, nie sądzę, że jest opłacalne npm i każdy pakiet, który wyrzuca błąd
Gilbert R.

34

Jeśli nie ma @types/<package>modułu, którego używasz, możesz łatwo ominąć problem, dodając // @ts-ignorekomentarz powyżej, np

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

Alternatywnie możesz utworzyć brakujące @types/<package>:

publikowanie plików deklaracji

Zdecydowanie napisane, jak mogę wnieść swój wkład


1
Przy okazji ten pakiet nie ma @typesjeszcze dostępnej. Utworzono problem w repozytorium ... github.com/geelen/react-snapshot/issues/131
doublejosh

21

W moim przypadku miałem problem z reakcją, więc zacząłem robić:

npm install @types/react

a następnie do

npm install @types/react-dom

To zadziałało dla mnie


1
Nawet jeśli były już zainstalowane, ponowne uruchomienie tych poleceń rozwiązało problem.
heringer

Zasadniczo aktualizuje istniejące pakiety po ponownym uruchomieniu poleceń. To był powód, dla którego problem został rozwiązany.
Anant Lalchandani

7

Wszystko, co musisz zrobić, to uruchomić poniższy skrypt. Następnie usuń / ponownie zainstaluj moduł, którego chcesz użyć.

npm install --save @types/react-redux

1
Wygląda na to, że nie ma dostępnego @ types /
React

6

Miałem ten problem, kiedy dodałem react-router-domdo nowej aplikacji CRA przy użyciu maszynopisu. Po dodaniu @types/react-routerproblem został rozwiązany.


Co zrobić po zainstalowaniu tego?
Pardeep Jain

6

Miałem ten sam problem, ale niekoniecznie związany z maszynopisem, więc zmagałem się trochę z tymi różnymi opcjami. Robię bardzo podstawową aplikację „create-react-app” przy użyciu określonego modułu i powoduje react-portal-tooltip,podobny błąd:

Nie można znaleźć pliku deklaracji dla modułu „React-portal-tooltip”. „/node_modules/react-portal-tooltip/lib/index.js” ma niejawnie typ „any”. Spróbuj, npm install @types/react-portal-tooltipjeśli istnieje, lub dodaj nowy plik deklaracji (.d.ts) zawierający declare module 'react-portal-tooltip';ts (7016)

Najpierw wypróbowałem wiele kroków - dodawanie różnych .d.tsplików, różne instalacje npm.

Ale to, co ostatecznie zadziałało dla mnie, touch src/declare_modules.d.ts to src/declare_modules.d.ts:

declare module "react-portal-tooltip";

i w src/App.js:

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

Trochę zmagałem się z różnymi lokalizacjami, aby użyć tej ogólnej strategii `` deklarowania modułu '' (jestem bardzo początkującym), więc myślę, że będzie to działać z różnymi opcjami, ale mam włączone ścieżki do tego, co zadziałało.

Początkowo myślałem, że import './declare_modules.d.ts'to konieczne. Chociaż teraz wydaje się, że tak nie jest! Ale włączam krok na wypadek, gdyby to komuś pomogło.

To jest moja pierwsza odpowiedź na temat przepełnienia stosu, więc przepraszam za rozproszony proces tutaj i mam nadzieję, że nadal był pomocny! :)


2
To jest naprawdę schludne i proste. Dziękuję Ci. Tak trzymaj!
Cubelaster

4

Ten błąd zostanie również naprawiony, jeśli pakiet, którego próbujesz użyć, ma własne pliki typu i jest wymieniony w atrybucie package.json typings

Tak jak to:

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

Bardziej hackerskim sposobem jest dodanie linii np. W boot.tsx

import './path/declare_modules.d.ts';

z

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

w declare_modules.d.ts

Działa, ale inne rozwiązania są lepsze IMO.


3

To, co zrobiłem, to uruchomienie następujących poleceń z wiersza poleceń nodejs w katalogu folderu projektu:

  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. zaimportuj pakiet (w modułach węzłów) do pliku App.js dodając kod: import UniqueId from 'react-html-id';

Zrobiłem powyższe (chociaż miałem już zainstalowany npm) i zadziałało!


2

Nie można znaleźć pliku deklaracji dla modułu „reaguj / jsx-runtime”

Jeśli ktoś ma ten błąd, zdziwisz się, że podczas tworzenia aplikacji Reaguj z create-react-app, pojawia się on tylko @types/reactw package.json. Ale jeśli sprawdzisz zawartość node_modules/@typesfolderu, nie znajdziesz żadnego folderu react.

Rozwiązaniem jest po prostu node_modulescałkowite wyczyszczenie folderu i ponowna instalacja - npm installlub może można przejść z indywidualną instalacją modułu - npm install @types/react.


1
Dobrze to wyjaśniłeś :)
Awais Usmani

2

w 2021 roku, aby utworzyć .d.tsplik ręcznie, wystarczy wykonać następujące czynności:

1- wejdź src folder

2- Utwórz global.d.tsplik

3-zadeklaruj w nim moduły takie jak:

declare module 'module-name';

Odpowiedziałem na to tutaj wcześniej i było miło


0

Na moim przypadku problemem było to, że typy nie były coraz dodany do pliku package.json pod devDependencies go naprawić Pobiegłem npm install --save-dev @types/react-reduxpamiętać, że--save-dev


0

spróbuj dodać do pliku tsconfig.json: "noImplicitAny": false zadziałało dla mnie


1
Zasadniczo wyłączasz całą dobroć zapewnianą przez TypeScript, robiąc to. Dlaczego nie użyć zwykłego JS?
Matt Ruwe

0

Mam to po wielu kłopotach W aplikacji React w folderze src będzie plikreak-app-env.d.ts po prostu zadeklaruj tam moduł

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.