Реакція машинопису - Не вдалося знайти файл декларації для модуля '' реагувати-матеріалізувати ''. 'path / to / module-name.js' неявно має будь-який тип


100

Я намагаюся імпортувати компоненти з реагувати-матеріалізуватися як -

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

Але коли веб-пакет компілює мій, .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та веб-пакета.

Реакція index.js-матеріалізація виглядає так. Але як це вирішити для імпорту модуля у моїх власних файлах ..

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


2
Вам потрібно встановити типи / типи для пакета (npm install @ types / response-materialize). Однак, схоже, цього поки що не існує, тому, можливо, вам доведеться створити його самостійно. Я знайшов цю статтю корисною - templecoding.com/blog/2016/03/31/…
T Mitchell

@T Mitchell, так це означає, що будь-які типи, яких нам не вистачає, ми ніколи не змогли б скомпілювати веб-пакет, не створивши ці типи? Повинен бути якийсь спосіб?
Радість


це здається мені трохи обхідним шляхом.
SuperUberDuper

Відповіді:


74

У мене була подібна помилка, але для мене це було 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.


Незважаючи на те, що в даний час ще немає такого пакета @ types / response-navigation-tabs, все-таки згаданий "noImplicitAny": false,його деактивував (цю проблему я отримав через використання вхідно-реактивного init MyProject --template typecript, я так думаю, принаймні) 👍
Вгору -Master

1
абоyarn add @types/react-router --dev
Омар Тарік

58

Для тих, хто хотів знати, як я це подолав. Я робив хакерські речі.

Всередині мого проекту я створив папку з назвою @typesта додав її до tsconfig.json для пошуку всіх необхідних типів з неї. Тож це виглядає приблизно так -

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

І всередині цього я створив файл з назвою alltypes.d.ts. Знайти з нього невідомі типи. отже, для мене це були невідомі типи, і я додав їх туди.

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

Тож машинопис більше не скаржився на типи, які вже не знайдені. :) виграй перемогу зараз :)


3
Я пропустив частину про те, що вона знаходиться в окремому файлі. Здається, що я помістив ці declareвисловлювання у файл із іменем, index.d.tsце виправило для мене. Мені не довелося торкатися typeRoots.
Скотті Вагонер,

Це чудово працює, але викликає проблеми при використанні require для інших речей, таких як зображення. По суті, це просто не дозволяє використовувати requireдля чого-небудь.
Друвдутт Ядхав,

1
це рішення більше не працює з останніми 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
Щось, що також варто згадати: залежно від місцезнаходження вашого джерела, вам також може знадобитися додати "../types" до вашого масиву "includes"
netpoetica

1
У мене проблеми з react-countdown-clockствореною @typesпапкою та виконанням усіх вищевказаних кроків. все ще отримує ту саму помилку.
Джоту,

44

У мене була та ж проблема з типами реакції-відновлення. Найпростішим рішенням було додати до 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"]
}

це чудово працювало в IntelliJIDE, але спеціальний typeRootsметод (що є прийнятою відповіддю) навіть працював в VS CodeIDE
Top-Master

4
Я думаю, що це хак, хоча це вирішило проблему, але чи існує якесь дійсне і постійне рішення для цієї проблеми?
Пардіп Джейн,

Я думаю, що це найкраще рішення цієї проблеми, я не думаю, що це життєздатне для npm у кожному пакунку, який спричиняє помилку
Гілберт Р.

30

Якщо @types/<package>для модуля, який ви використовуєте, немає, ви можете легко обійти проблему, додавши // @ts-ignoreкоментар вище, тобто

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

Крім того, ви можете створити відсутні @types/<package>такі:

публікація файлів декларацій

БезумовноВведено, як я можу внести свій внесок


1
Цей пакет ще не має @typesдоступу до речі. Створив випуск на репо ... github.com/geelen/react-snapshot/issues/131
doublejosh

17

У моєму випадку у мене була проблема з реакцією, тому я почав робити:

npm install @types/react

а потім до

npm install @types/react-dom

Це спрацювало для мене


Навіть жорсткі вони вже були встановлені, повторне виконання цих команд вирішило проблему для мене.
heringer

По суті, він оновлює наявні пакунки при повторному запуску команд. Це було причиною вирішення проблеми.
Анант Лалчандані,

7

Все, що вам потрібно зробити, це запустити наведений нижче сценарій. Потім видаліть / переінсталюйте модуль, який ви хочете використовувати.

npm install --save @types/react-redux

1
Здається, немає доступних @ типів / реагувати-матеріалізуватися
RonLugge

6

У мене виникла ця проблема, коли я додав react-router-domдо нової програми CRA за допомогою машинопису. Після того, як я додав @types/react-router, проблема була виправлена.


Що робити після встановлення цього?
Пардіп Джейн

5

У мене була така сама проблема, але не обов'язково пов'язана з машинописом, тому я трохи боровся з цими різними варіантами. Я роблю дуже простий додаток create-response, використовуючи певний модуль, react-portal-tooltip,отримуючи подібну помилку:

Не вдалося знайти файл декларації для модуля 'response-portal-tooltip'. '/node_modules/react-portal-tooltip/lib/index.js' неявно має тип 'будь-який'. Спробуйте, npm install @types/react-portal-tooltipякщо він існує, або додайте новий файл декларації (.d.ts), що містить declare module 'react-portal-tooltip';ts (7016)

Спочатку я спробував багато кроків - додавання різних .d.tsфайлів, різні встановлення npm.

Але що врешті-решт у мене спрацювало, це було touch 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'

Я трохи боровся з різними місцями, щоб використовувати цю загальну стратегію `` оголосити модуль '' (я дуже новачок), тому я думаю, що це буде працювати з різними варіантами, але я включив шляхи до того, що спрацювало на мене.

Спочатку я вважав, що import './declare_modules.d.ts'це потрібно. Хоча зараз здається, що ні! Але я включаю крок на випадок, якщо це комусь допоможе.

Це моя перша відповідь на stackoverflow, тому я прошу вибачення за розпорошений тут процес і сподіваюся, що це все-таки було корисно! :)


2
Це дійсно акуратно і просто. Дякую. Продовжуй гарно працювати!
Cubelaster

4

Крім того, ця помилка виправляється, якщо пакет, який ви намагаєтесь використовувати, має власний файл (файли) типу, і він перерахований в атрибуті package.json typings

Подобається так:

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

Більш хакерський спосіб - це додати, наприклад, рядок у boot.tsx

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

з

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

в declare_modules.d.ts

Це працює, але інші рішення краще IMO.


3

Що я зробив, це запустив такі команди з командного рядка nodejs, перебуваючи в каталозі папки проекту:

  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. імпортуйте пакет (у вузлових модулях) у файл App.js, додавши код: import UniqueId from 'react-html-id';

Я зробив вище (хоча у мене вже був встановлений npm), і це спрацювало!


0

У моєму випадку проблема полягала в тому, що типи не додавалися до файлу package.json під devDependencies, щоб це виправити. Я запустив, npm install --save-dev @types/react-reduxзверніть увагу на--save-dev


0

спробуйте додати до файлу tsconfig.json: "noImplicitAny": false працював у мене


Ви в основному відключаєте все добро, яке надає TypeScript, роблячи це. Чому б просто не використовувати звичайний JS?
Метт Руве,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.