Во многих фреймворках встроен SVGR, который позволяет подключать svg-файлы как реакт-компоненты. Проблема в том, что у такого компонента напрочь отсутствует типизация, ему можно передать любые пропсы. Решить эту проблему можно следующим образом:
- создайте файл
svg.d.ts.(название не имеет значения) со следующим содержимым:declare module '*.svg' { import * as React from 'react'; export const ReactComponent: React.FunctionComponent< React.SVGProps<SVGSVGElement> & { title?: string } >; const src: string; export default src; }
- Добавьте путь к файлу в массив
includeв вашемtsconfig.json(в примере файл находится в корне проекта):
- Далее при импорте svg - файла вам надо будет писать:
Но эту запись можно улучшить. Создайте файл
import { ReactComponent as DisableIcon } from './icons/disable.svg'; import { ReactComponent as EnableIcon } from './icons/enable.svg';
index.tsв папкеiconsи сделайте там реэкспорт ваших svg-файлов:Теперь у вас будет красивый импорт и типизированные svg:export { ReactComponent as DisableIcon } from './icons/disable.svg'; export { ReactComponent as EnableIcon } from './icons/enable.svg';
import { DisableIcon, EnableIcon } from './icons';