트러블슈팅

[React + TypeScript] SVG 파일 사용 타입 에러

검소한달걀 2024. 9. 20. 16:31

 

import { ReactComponent as Arrow } from './assets/icon/double-arrow.svg';

React + TypeScript 환경에서 svg 이미지 파일을 import 하면 아래와 같은 에러가 난다.

 

 

해결 방법

TypeScript가 해당 파일을 모듈로 인식하지 못하기 때문에 타입 선언 파일을 만들어준다.

 


   - .d.ts는 declaration file(타입 선언 파일)로 TypeScript 프로젝트에서 타입 정보를 제공하는 용도로 사용된다.

   - 컴파일러에게 해당 모듈이 어떻게 동작하는지 알려주는 역할을 한다.

   - 보통 외부 라이브러리나 특정 파일 형식을 TypeScript가 이해할 수 있게 하거나,
      타입 정보가 없는 파일을 사용할 때 .d.ts 파일을 만들어 해당 파일의 타입을 선언한다.

 

// custom.d.ts
declare module '*.svg' {
  export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
  const src: string;
  export default src;
}

 

- 모든 .svg 파일을 모듈로 간주

- SVG 파일을 React 컴포넌트처럼 사용할 수 있게 선언

- 기본적으로 SVG 파일의 경로를 string으로 내보냄

 

 

그다음 tsconfig.json의 include에 'custom.d.ts'를 추가해 준다.

 

// tsconfig.json
"include": ["src", "custom.d.ts"]