Реакція машинопису - Не вдалося знайти файл декларації для модуля '' реагувати-матеріалізувати ''. '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.