生成される型の仕組み
コンポーネントの props は SVGProps<SVGSVGElement> 型です。これは React が <svg> 要素に使っている型と同じなので、すべての SVG 属性とイベントハンドラが補完され、不正な props はコンパイル時に TypeScript が検出します。
size オプションを有効にすると props は SVGProps<SVGSVGElement> & { size?: number | string } になり、width と height は size から設定されます。forwardRef を有効にすると ref は Ref<SVGSVGElement> 型になり、親が計測やアニメーションライブラリ用に ref を渡せます。
TSX 出力のチェックリスト
生成したアイコンをコミットする前に、次の点を確認しましょう。
- コンポーネント名が PascalCase で、ファイル名と一致している(ArrowLeft.tsx)。
- SVGProps と Ref は型としてのみインポートされ、JavaScript バンドルから消える。
- viewBox が残っている。これがないとアイコンは拡大縮小できません。
- コードベースで default エクスポートが禁止されている場合は名前付きエクスポートを使う。
strict モードにも対応
コードは "strict": true と、Next.js・Vite・esbuild が要求する isolatedModules の両方でコンパイルできます。any 型は一切生成されず、size のデフォルト値は分割代入の中にリテラルとして書かれます。