Em typescript(*.tsx)
arquivos, não consigo importar o arquivo svg com esta declaração:
import logo from './logo.svg';
Transpiler diz: [ts] cannot find module './logo.svg'.
Meu arquivo svg é justo <svg>...</svg>
.
Mas no .js
arquivo posso importá-lo sem problemas com exatamente a mesma instrução de importação. Suponho que tenha algo a ver com o tipo de arquivo svg que deve ser definido de alguma forma para transpiler ts.
Você poderia compartilhar como fazer isso funcionar em arquivos ts?
typescript
svg
AngryBoy
fonte
fonte
import
afirmação. Talvez o Webpack seja o que está permitindo isso em seu JavaScript, mas não está fazendo a mesma mágica em arquivos TypeScript. (Não acho que o TypeScript em si saiba o que fazer aqui.)const logo = require("./logo.svg");
ou simplesmente ignorar o erro. (Acredito que o TS ainda deve estar exibindo o código correto.)const logo = require("./logo.svg") as string;
Respostas:
Se você usar o webpack, poderá fazer isso criando um arquivo de tipos personalizados.
Crie um arquivo denominado custom.d.ts com o seguinte conteúdo:
Adicione o
custom.d.ts
atsconfig.json
como abaixoFonte: https://webpack.js.org/guides/typescript/#importing-other-assets
fonte
include
seção em tsconfig.json ."files": [ "custom.d.ts" ]
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
custom.d.ts
arquivo funcione globalmente para que o SVG fique em um diretório diferente docustom.d.ts
arquivo? Recebo um erro "não é possível encontrar o módulo", a menos que ele esteja no mesmo diretório.Obrigado smarx por apontar o uso
require()
. Então, no meu caso, deveria ser:que funciona bem em arquivos * .tsx
fonte
logo
pode ter um nome melhorlogoPath
, porque é assim que se transforma.logo
na pergunta, portanto, é uma resposta melhor para esta pergunta específica como está.Adicione um
custom.d.ts
arquivo (eu o criei no caminho raiz do meu diretório src) com o tipo correto (graças a RedMatt ):Instale svg-react-loader ou algum outro , então:
Em seguida, basta usá-lo como uma tag JSX:
fonte
A solução que encontrei: No projeto ReactJS, no arquivo react-app-env.d.ts você apenas remove o espaço no comentário como:
Antes
Depois de
Espero te ajudar
fonte
Eu tive o mesmo problema ao tentar um tutorial REACT + datilografado.
O que funcionou para mim foi a seguinte instrução de importação.
Aqui estão minhas dependências em package.json.
Espero que ajude alguém.
fonte
Existe uma maneira alternativa de fazer isso que implementamos: crie seus componentes SVGs. Eu fiz isso porque me incomodou que eu estava usando
require
declarações commonJS junto com o meuimport
s.fonte
se você estiver usando o slint do puglin pode ser que ele tenha desativado pensando que era um comentário mas não para ler o svg você precisa deste tipo de módulo de script apenas desative a linha e fique feliz
fonte
Para usar n ativos no código com TypeScript , precisamos adiar o tipo para essas importações . Isso requer um arquivo custom.d.ts que significa definições personalizadas para TypeScript em nosso projeto.
Vamos configurar uma declaração para arquivos .svg:
custom.d.ts
Aqui, declaramos um novo módulo para SVGs especificando qualquer importação que termine em .svg e definindo o conteúdo do módulo como any.
fonte