Texto tipificado react - Não foi possível encontrar um arquivo de declaração para o módulo '' react-materialize '. 'path / to / module-name.js' implicitamente tem qualquer tipo

110

Estou tentando importar componentes do react-materialize como -

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

Mas quando o webpack está compilando meu, .tsxele lança um erro para o acima como -

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.

Qualquer resolução para isso. Não tenho certeza de como resolver esta declaração de importação para trabalhar com um ts-loaderwebpack.

O index.jsde reagir-materializar é assim. Mas como resolver isso para a importação do módulo em meus próprios arquivos ..

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

Alegria
fonte
2
Você precisa instalar as tipificações / tipos para o pacote (npm install @ types / react-materialize). No entanto, parece que ainda não existe, portanto, talvez seja necessário criá-lo você mesmo. Achei este artigo útil - templecoding.com/blog/2016/03/31/…
T Mitchell
@T Mitchell então isso significa que qualquer tipo de tipo que estamos perdendo nunca seríamos capazes de compilar o webpack sem isso criar esses tipos? Deve haver alguma maneira?
Joy
2
Existe uma maneira - stackoverflow.com/questions/38224232/…
T Mitchell
isso parece um pouco uma solução alternativa para mim.
SuperUberDuper

Respostas:

81

Eu tive um erro semelhante, mas para mim foi react-router. Resolvido instalando tipos para ele.

npm install --save @types/react-router

Erro:

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

Se desejar desativá-lo em todo o site, você pode editar tsconfig.jsone definir noImplicitAnycomo false.

Ogglas
fonte
1
Embora atualmente não exista esse pacote @ types / react-navigation-tabs ainda, o mencionado "noImplicitAny": false,o desabilitou (eu tive esse problema por usar o init reac-native MyProject --template typescript, pelo menos acho que sim) 👍
Início -Mestre de
1
ouyarn add @types/react-router --dev
Omar Tariq
65

Para quem queria saber como eu superei isso. Eu fiz um tipo de hack.

Dentro do meu projeto, criei uma pasta chamada @typese adicionei-a a tsconfig.json para encontrar todos os tipos necessários. Então, parece um pouco com isso -

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

E dentro disso criei um arquivo chamado alltypes.d.ts. Para encontrar os tipos desconhecidos dele. então para mim esses eram os tipos desconhecidos e eu adicionei lá.

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

Portanto, agora o texto datilografado não reclamava dos tipos que não eram mais encontrados. :) situação ganha-ganha agora :)

Alegria
fonte
3
Eu perdi a parte sobre estar em um arquivo separado. Parece que colocar essas declaredeclarações em um arquivo chamado index.d.tscorrigiu para mim. Não precisei tocar em typeRoots.
Scotty Wagoner
Isso funciona bem, mas causa problemas ao usar require para outras coisas, como imagens. Basicamente, ele simplesmente não permite que você use requirepara nada.
Dhruvdutt Jadhav
1
esta solução não funciona mais com o TS mais recente. 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
Algo que também vale a pena mencionar: dependendo da localização de sua fonte, você também pode precisar adicionar "../types" ao seu array "includes"
netpoetica
1
Tenho problemas com react-countdown-clock, criei a @typespasta e executei todas as etapas acima. ainda recebendo o mesmo erro.
Jyothu
48

Eu tive o mesmo problema com os tipos react-redux. A solução mais simples foi adicionar ao tsconfig.json:

"noImplicitAny": false

Exemplo:

{
  "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"]
}
Jackkobec
fonte
funcionou muito bem no IntelliJIDE, mas o typeRootsmétodo personalizado (que é a resposta aceita) funcionou até no VS CodeIDE
Top-Master de
6
Acho que é um hack, embora tenha resolvido o problema, mas existe alguma solução válida e permanente para esse problema?
Pardeep Jain
Acho que essa é a melhor solução para esse problema, não acho que seja viável para npm em todos os pacotes que erram
Gilbert R.
34

Se não houver nenhum @types/<package>para o módulo que você está usando, você pode facilmente contornar o problema adicionando um // @ts-ignorecomentário acima, ou seja,

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

Alternativamente, você pode criar o @types/<package> seguinte:

publicação de arquivos de declaração

DefinitelyTyped como posso contribuir

Mateja Petrovic
fonte
1
Este pacote ainda não tem um @typesBTW disponível. Criado um problema no repo ... github.com/geelen/react-snapshot/issues/131
doublejosh
21

No meu caso, tive um problema com o react, então comecei a fazer:

npm install @types/react

e então para o

npm install @types/react-dom

Isso funcionou para mim

AlessandroASB
fonte
1
Mesmo que eles já estivessem instalados, a reexecução desses comandos resolveu o problema para mim.
apresentador
Basicamente, ele atualiza seus pacotes existentes quando você executa novamente os comandos. Essa foi a razão pela qual o problema foi resolvido.
Anant Lalchandani
7

Tudo que você precisa fazer é executar o script abaixo. Em seguida, remova / reinstale o módulo que deseja usar.

npm install --save @types/react-redux
Tun
fonte
1
Não parece haver um @ types /
react
6

Tive esse problema quando adicionei react-router-domao novo aplicativo CRA usando o texto digitado. Depois de adicionar @types/react-router, o problema foi corrigido.

dkocich
fonte
O que fazer depois de instalar isso?
Pardeep Jain
6

Tive o mesmo problema, mas não necessariamente relacionado à digitação, então me esforcei um pouco com essas diferentes opções. Estou fazendo um aplicativo criar-reagir muito básico usando um módulo específico, react-portal-tooltip,obtendo um erro semelhante:

Não foi possível encontrar um arquivo de declaração para o módulo 'react-portal-tooltip'. '/node_modules/react-portal-tooltip/lib/index.js' implicitamente tem um tipo 'qualquer'. Experimentarnpm install @types/react-portal-tooltip se ele existe ou adicione um novo arquivo de declaração (.d.ts) contendo declare module 'react-portal-tooltip';ts (7016)

Tentei várias etapas primeiro - adicionando várias .d.ts arquivos, várias instalações de npm.

Mas o que funcionou para mim foi touch src/declare_modules.d.ts então src/declare_modules.d.ts:

declare module "react-portal-tooltip";

e em src/App.js:

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

Lutei um pouco com os diferentes locais para usar essa estratégia geral de 'declarar módulo' (sou muito iniciante), então acho que funcionará com diferentes opções, mas incluí caminhos para o que funcionou.

Eu inicialmente pensei import './declare_modules.d.ts' fosse necessário. Embora agora pareça que não é! Mas estou incluindo a etapa caso ajude alguém.

Esta é minha primeira resposta stackoverflow, então peço desculpas pelo processo disperso aqui e espero que ainda tenha sido útil! :)

Sylvia Pap
fonte
2
Isso é realmente puro e simples. Obrigado. Mantenha o bom trabalho!
Cubelaster
4

Além disso, esse erro será corrigido se o pacote que você está tentando usar tiver seu (s) próprio (s) arquivo (s) de tipo e estiver listado no atributo package.json typings

Igual a:

{
  "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
}
Roy Art
fonte
3

Uma maneira mais hacky é adicionar, por exemplo, em boot.tsx a linha

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

com

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

dentro declare_modules.d.ts

Ele funciona, mas outras soluções são melhores IMO.

Soleil - Mathieu Prévot
fonte
3

O que fiz foi executar os seguintes comandos no prompt de comando nodejs enquanto estava no diretório da pasta do projeto:

  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. importe o pacote (em módulos de nó) no arquivo App.js adicionando o código: import UniqueId from 'react-html-id';

Eu fiz o acima (embora já tivesse instalado o npm) e funcionou!

naru123
fonte
2

Não foi possível encontrar um arquivo de declaração para o módulo 'react / jsx-runtime'

Se alguém estiver tendo esse erro, você ficará surpreso ao saber que, ao criar o app react com create-react-app, ele só aparece @types/reactno package.json. Mas se você verificar dentro da node_modules/@typespasta, você não encontrará nenhuma pasta dereact .

A solução é simplesmente eliminar o node_modules pasta completamente e reinstalar - npm installou talvez ir com a instalação do módulo individual - npm install @types/react.

Germa Vinsmoke
fonte
1
Você explicou certo :)
Awais Usmani
1

em 2021 para criar .d.ts arquivo manualmente, você só precisa fazer o seguinte:

1- entrar src folder

2- criar global.d.ts arquivo

3-declare módulos nele como:

declare module 'module-name';

Eu respondi aqui antes e foi bom

sina
fonte
0

No meu caso, o problema era que os tipos não estavam sendo adicionados ao arquivo package.json em devDependencies para corrigi-lo. Executei a npm install --save-dev @types/react-reduxobservação do--save-dev

Japheth Ongeri - inkalimeva
fonte
0

tente adicionar ao arquivo tsconfig.json: "noImplicitAny": false funcionou para mim

Bekzat
fonte
1
Você está basicamente desabilitando todas as vantagens fornecidas pelo TypeScript ao fazer isso. Por que não apenas usar JS regular?
Matt Ruwe
0

Eu consegui depois de muitos problemas. No app react, haverá um arquivo react-app-env.d.ts na pasta src, basta declarar o módulo lá

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

Chetan Jain
fonte
-2

funciona bem

npm install @types/react-materialize
Arturas
fonte
3
não há tipos para reagir-materializar
katzmopolitan de