В typescript(*.tsx)
файлах я не могу импортировать файл svg с этим утверждением:
import logo from './logo.svg';
Transpiler говорит: [ts] cannot find module './logo.svg'.
Мой файл svg просто <svg>...</svg>
.
Но в .js
файле я могу импортировать его без каких-либо проблем с точно таким же оператором импорта. Я полагаю, это как-то связано с типом файла svg, который должен быть каким-то образом установлен для транспилятора ts.
Не могли бы вы поделиться, как заставить это работать в файлах ts?
typescript
svg
AngryBoy
источник
источник
import
утверждение. Возможно, Webpack - это то, что позволяет это в вашем JavaScript, но он не делает того же волшебства в файлах TypeScript. (Я не думаю, что сам TypeScript знает, что здесь делать.)const logo = require("./logo.svg");
исправить ошибку или просто проигнорировать ее. (Я считаю, что TS по-прежнему должен выводить правильный код.)const logo = require("./logo.svg") as string;
Ответы:
Если вы используете webpack, вы можете сделать это, создав файл пользовательских типов.
Создайте файл с именем custom.d.ts со следующим содержимым:
Добавьте
custom.d.ts
кtsconfig.json
нижеИсточник: https://webpack.js.org/guides/typescript/#importing-other-assets
источник
include
раздел в tsconfig.json ."files": [ "custom.d.ts" ]
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
custom.d.ts
файл работал глобально, чтобы SVG находился в другом каталоге, чемcustom.d.ts
файл? Я получаю сообщение об ошибке «не могу найти модуль», если он не находится в том же каталоге.Спасибо smarx за указание на использование
require()
. Так что в моем случае это должно быть:который отлично работает в файлах * .tsx
источник
logo
можно было бы лучше назватьlogoPath
, потому что это то, чем оно становится.logo
он вызывается в вопросе, так что это лучший ответ на этот конкретный вопрос как таковой.Добавьте
custom.d.ts
файл (я создал его по корневому пути моего каталога src) с правильным типом (спасибо RedMatt ):Установите svg-react-loader или другой , затем:
Затем просто используйте его как тег JSX:
источник
Решение, которое я нашел: в проекте ReactJS в файле response-app-env.d.ts вы просто удаляете пробел в комментарии, например:
Перед
После
Я надеюсь помочь тебе
источник
У меня была такая же проблема, когда я пробовал использовать рукописный текст REACT +.
Для меня сработал следующий оператор импорта.
Вот мои зависимости в package.json.
Надеюсь, это кому-то поможет.
источник
Есть альтернативный способ сделать это, который мы реализовали: создать компоненты SVG. Я сделал это, потому что меня беспокоило, что я использую commonJS
require
вместе с моимиimport
s.источник
если вы используете puglin slint, возможно, он отключил, думая, что это был комментарий, но не для чтения svg, вам нужен модуль сценария этого типа, просто отключите строку и будьте счастливы
источник
Чтобы использовать n ресурсов в коде с TypeScript , нам нужно отложить тип для этого импорта . Для этого требуется файл custom.d.ts, который обозначает пользовательские определения для TypeScript в нашем проекте.
Давайте настроим объявление для файлов .svg:
custom.d.ts
Здесь мы объявляем новый модуль для SVG, указывая любой импорт, заканчивающийся на .svg, и определяя содержимое модуля как любое.
источник