๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dev/React

๊ธฐ์กด Vite + React ํ”„๋กœ์ ํŠธ์— TypeScript ์ถ”๊ฐ€ํ•˜๊ธฐ (๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ •๋ฆฌ)

by vellahw 2026. 3. 12.

 

 

๐Ÿ“š

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค.

๊ธฐ์กด์— ์„ธํŒ…์€ ๋˜์—ˆ๋˜ ํ”„๋กœ์ ํŠธ๋ผ, Vite + React(JavaScript) ํ”„๋กœ์ ํŠธ์— TypeScript๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๊ณผ์ •๊ณผ ํ•„์š”ํ•œ ์„ค์ •์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.


1. TypeScript ์„ค์น˜

๋จผ์ € ํ”„๋กœ์ ํŠธ์— TypeScript์™€ React ํƒ€์ž…์„ ์„ค์น˜ํ•œ๋‹ค.

npm install -D typescript @types/react @types/react-dom

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด TypeScript ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

npx tsc --init

๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— tsconfig.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

 

2. tsconfig.json ์„ค์ •

๊ธฐ๋ณธ ์ƒ์„ฑ๋œ tsconfig.json์„ Vite ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ผ๋ถ€ ์ˆ˜์ •ํ–ˆ๋‹ค.

{
  "compilerOptions": {
    "target": "ESNext",
    "lib": ["DOM", "DOM.Iterable", "ESNext"],

    "module": "ESNext",
    "moduleResolution": "Bundler",

    "jsx": "react-jsx",

    "strict": true,
    "skipLibCheck": true,

    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,

    "allowJs": true
  },
  "include": ["src"]
}

 

โœ…์ฃผ์š” ์˜ต์…˜

๋”๋ณด๊ธฐ

- strict

 TypeScript์˜ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ํ•œ๋‹ค.

 

- allowJs

 ๊ธฐ์กด JavaScript ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
 ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— TypeScript๋ฅผ ๋„์ž…ํ•  ๋•Œ ์œ ์šฉํ•จ. ํŒŒ์ผ์ด ๋งŽ์„ ๋•Œ๋Š” ์ค‘์š”!

 

- moduleResolution: Bundler

Vite ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ชจ๋“ˆ ํ•ด์„ ๋ฐฉ์‹

 

3. vite-env.d.ts ์ƒ์„ฑ

Vite ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํƒ€์ž…์„ ์œ„ํ•ด
vite-env.d.ts ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค.

src ํด๋” ์•ˆ์— ์•„๋ž˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

/// <reference types="vite/client" />

์ด ํŒŒ์ผ์ด ์žˆ์–ด์•ผ import.meta.env.VITE_API_URL ๊ฐ™์€ ์ฝ”๋“œ์—์„œ ํƒ€์ž…์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

4. vite.config.js → vite.config.ts ๋ณ€๊ฒฝ

Vite ์„ค์ • ํŒŒ์ผ๋„ TypeScript๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

vite.config.js → vite.config.ts

 

 

5. main ํŒŒ์ผ ๋จผ์ € TypeScript๋กœ ๋ณ€ํ™˜

๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ๋Š” entry ํŒŒ์ผ๋ถ€ํ„ฐ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";

ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

 

์—ฌ๊ธฐ์„œ !๋Š” Non-null assertion์œผ๋กœ
root ์š”์†Œ๊ฐ€ null์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ TypeScript์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

main ์ดํ›„๋กœ๋Š” App ์ปดํฌ๋„ŒํŠธ, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ๋Š” ๋ณดํ†ต ์ด๋Ÿฌํ•œ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ .. (์•„๋ฌด๋ž˜๋„)

 


๐Ÿ’ก ํƒ€์ž… ์ •์˜

1. Props ํƒ€์ž… ์ •์˜

์ปดํฌ๋„ŒํŠธ๋ฅผ TypeScript๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” Props ํƒ€์ž…์„ ์ •์˜ํ•ด์ค€๋‹ค.

type ButtonProps = {
  children: React.ReactNode;
  onClick?: () => void;
};

export function Button({ children, onClick }: ButtonProps) {
  return <button onClick={onClick}>{children}</button>;
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

2. API ํƒ€์ž… ์ •์˜

API ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ํƒ€์ž…์„ ์ •์˜ํ•ด์ค€๋‹ค.

interface User {
  id: number;
  name: string;
}

axios ์š”์ฒญ์—์„œ๋„ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

axios.get<User[]>("/api/users");

 

์‹ค๋ฌด์—์„œ๋Š” ์œ„์ฒ˜๋Ÿผ ์ •์˜ํ•œ ํƒ€์ž…์„ ๋ณ„๋„ ํด๋”๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

src
 โ”œ components
 โ”œ hooks
 โ”œ api
 โ”œ types
 โ”œ utils
 โ”” pages

 

src/types/user.ts
export interface User {
  id: number;
  name: string;
}

 


 

๋งˆ๋ฌด๋ฆฌ

๊ธฐ์กด Vite + React ํ”„๋กœ์ ํŠธ์— TypeScript๋ฅผ ์ ์šฉํ•  ๋•Œ ํ•„์š”ํ•œ ๊ณผ์ •

  1. TypeScript ์„ค์น˜
  2. tsconfig.json ์ƒ์„ฑ ๋ฐ ์„ค์ •
  3. vite-env.d.ts ์ƒ์„ฑ
  4. vite.config.ts ๋ณ€ํ™˜
  5. main.tsx๋ถ€ํ„ฐ ๋ณ€ํ™˜
  6. ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ TypeScript๋กœ ๋ณ€ํ™˜
  7. Props์™€ API ํƒ€์ž… ์ •์˜

์ฒ˜์Œ์—๋Š” ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ
ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก TypeScript์˜ ์žฅ์ ์ด ํฌ๊ฒŒ ๋А๊ปด์ง„๋‹ค.

์•ž์œผ๋กœ๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ
์ฒ˜์Œ๋ถ€ํ„ฐ React + TypeScript๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ์„ ํƒ์ผ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

๋Œ“๊ธ€