Typescript react - '' react-materialize '' modülü için bir bildirim dosyası bulunamadı. 'yol / / modül-adı.js' örtük olarak herhangi bir türe sahiptir


100

React-materialize'dan bileşenleri içe aktarmaya çalışıyorum -

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

Ancak web paketimi .tsxoluştururken yukarıdakiler için bir hata atıyor -

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.

Bunun için herhangi bir çözüm ts-loader. Webpack ile çalışmak için bu import ifadesinin nasıl çözüleceğinden emin değilim.

index.jsTepki-Materialize görünüyor bunu beğendi. Ancak kendi dosyalarımdaki modül içe aktarımı için bunu nasıl çözebilirim?

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


2
Paket için türleri / türleri yüklemeniz gerekir (npm install @ types / react-materialize). Ancak, bu henüz mevcut değil gibi görünüyor, bu yüzden kendiniz oluşturmanız gerekebilir. Bu makaleyi yararlı buldum - templecoding.com/blog/2016/03/31/…
T Mitchell

@T Mitchell, bu, kaçırdığımız her tür türü, bu türleri oluşturmadan web paketini asla derleyemeyeceğimiz anlamına mı geliyor? Bir yolu olmalı mı?
Joy


bu bana biraz geçici bir çözüm gibi görünüyor.
SuperUberDuper

Yanıtlar:


74

Benzer bir hatam vardı ama benim için öyleydi react-router. Bunun için türler yükleyerek çözüldü.

npm install --save @types/react-router

Hata:

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

Eğer geniş yapabilirsiniz yerine düzenleme devre dışı siteye istiyorsanız tsconfig.jsonve seti noImplicitAnyiçin false.


Şu anda böyle bir @ types / react-navigation-tabs paketi olmamasına rağmen, yine de belirtilenler "noImplicitAny": false,onu devre dışı bıraktı (Bu sorunu react-native init MyProject --template typescript kullanmaktan dolayı aldım, en azından öyle düşünüyorum) 👍
Üst Master

1
veyayarn add @types/react-router --dev
Ömer Tarık

58

Bunu nasıl aştığımı bilmek isteyenler için. Bir tür hack işi yaptım.

@typesProjemin içinde, gerekli tüm türleri bulmak için tsconfig.json adlı bir klasör oluşturdum ve ekledim. Yani bir şekilde şuna benziyor -

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

Ve bunun içinde adlı bir dosya oluşturdum alltypes.d.ts. Ondan bilinmeyen türleri bulmak için. bu yüzden benim için bunlar bilinmeyen tiplerdi ve oraya ekledim.

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

Yani artık daktilo artık bulunmayan türlerden şikayetçi olmadı. :) şimdi kazan durumu kazan :)


3
Ayrı bir dosyada olmasıyla ilgili kısmı kaçırdım. Bu declareifadeleri index.d.tsbenim için düzelt adlı bir dosyaya koymak gibi görünüyor . TypeRoots'a dokunmak zorunda değildim.
Scotty Wagoner

Bu gayet iyi çalışıyor, ancak require resimler gibi diğer şeyler için kullanıldığında sorunlara neden oluyor . Temel olarak, requireherhangi bir şey için kullanmanıza izin vermez .
Dhruvdutt Jadhav 02

1
bu çözüm artık en son TS ile çalışmamaktadır. 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.
FlavourScape

2
Ayrıca bahsetmeye değer bir şey var: Kaynağınızın konumuna bağlı olarak, "içerir" dizinize "../types" eklemeniz de gerekebilir
netpoetica

1
İle ilgili sorunlarım var react-countdown-clock, @typesklasör oluşturdum ve yukarıdaki tüm adımları uyguladım. hala aynı hatayı alıyorum.
Jyothu

44

React-redux türlerinde de aynı sorunu yaşadım. En basit çözüm tsconfig.json'a eklenmiştir:

"noImplicitAny": false

Misal:

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

bu IntelliJIDE'de harika çalıştı , ancak özel typeRootsyöntem (kabul edilen cevap) VS CodeIDE'de bile işe yaradı
Top-Master

4
Bunun bir hack olduğunu düşünüyorum, ancak bu sorunu çözdü ama bu problem için geçerli ve kalıcı bir çözüm var mı?
Pardeep Jain

Bunun Bu sorunun en iyi çözüm olduğunu düşünüyorum, ben i err atar her paket NPM için geçerli olduğunu sanmıyorum
Gilbert R.


17

Benim durumumda react ile ilgili bir sorun yaşadım, bu yüzden yapmaya başladım:

npm install @types/react

ve sonra

npm install @types/react-dom

Bu benim için çalıştı


Zaten kurulmuş olmalarına rağmen, bu komutları yeniden çalıştırmak benim için sorunu çözdü.
heringer

Temel olarak, komutları yeniden çalıştırdığınızda mevcut paketlerinizi günceller. Sorunun çözülmesinin nedeni buydu.
Anant Lalchandani

7

Tek yapmanız gereken aşağıdaki komut dosyasını çalıştırmak. Ardından, kullanmak istediğiniz modülü çıkarın / yeniden kurun.

npm install --save @types/react-redux

1
@
Types

6

react-router-domTypcript kullanarak yeni CRA uygulamasına eklediğimde bu sorunu yaşadım . Ekledikten sonra @types/react-routersorun çözüldü.


Bunu kurduktan sonra ne yapmalı?
Pardeep Jain

5

Aynı problemi yaşadım, ancak daktilo ile ilgili olması gerekmiyor, bu yüzden bu farklı seçeneklerle biraz uğraştım. react-portal-tooltip,Benzer bir hata alan belirli bir modülü kullanarak çok basit bir uygulama oluşturma-tepki verme yapıyorum :

'React-portal-tooltip' modülü için bir bildirim dosyası bulunamadı. '/node_modules/react-portal-tooltip/lib/index.js' örtük olarak 'herhangi' bir türe sahiptir. npm install @types/react-portal-tooltipVarsa deneyin veya declare module 'react-portal-tooltip';ts (7016) içeren yeni bir bildirim (.d.ts) dosyası ekleyin

Önce birçok adımı denedim - çeşitli .d.tsdosyalar, çeşitli npm kurulumları ekledim.

Ama sonunda benim için işe yarayan şey touch src/declare_modules.d.ts o zamanlar src/declare_modules.d.ts:

declare module "react-portal-tooltip";

ve içinde src/App.js:

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

Bu genel 'ilan modülü' stratejisini kullanmak için farklı lokasyonlarla biraz uğraştım (çok yeni başlayan biriyim), bu yüzden bunun farklı seçeneklerle çalışacağını düşünüyorum ama bende işe yarayan yollara dahil oldum.

Başlangıçta import './declare_modules.d.ts'gerekli olduğunu düşündüm . Şimdi öyle görünmese de! Ama birine yardım etmesi durumunda adımı ekliyorum.

Bu benim ilk yığın aşımı cevabım, bu yüzden buradaki dağınık süreç için özür dilerim ve yine de yardımcı olacağını umuyorum! :)


2
Bu gerçekten temiz ve basit. Teşekkür ederim. İyi çalışmaya devam edin!
Cubelaster

4

Ayrıca, bu hata kullanıma çalıştığınız paket kendi tip dosya (lar) bu kadar eğer onarılır ve bunun içinde listelenir package.json typings özniteliği

Şöyle:

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

Daha karmaşık bir yol, örneğin boot.tsx'e satır eklemektir.

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

ile

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

içinde declare_modules.d.ts

İşe yarıyor ama diğer çözümler daha iyi IMO.


3

Yaptığım şey, proje klasörü dizinindeyken nodejs komut isteminden aşağıdaki komutları çalıştırmaktı:

  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. kodu ekleyerek paketi (düğüm modüllerinde) App.js dosyasına içe aktarın: import UniqueId from 'react-html-id';

Yukarıdakileri yaptım (zaten npm kurulu olmasına rağmen) ve işe yaradı!


0

Benim durumum için sorun, türlerin devDependencies altında package.json dosyasına eklenmemesiydi , düzeltmek npm install --save-dev @types/react-reduxiçin--save-dev


0

tsconfig.json dosyasına eklemeyi deneyin: "noImplicitAny": false benim için çalıştı


Bunu yaparak temelde TypeScript tarafından sağlanan tüm iyiliği devre dışı bırakıyorsunuz. Neden sadece normal JS kullanmıyorsunuz?
Matt Ruwe

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.