๐Ÿ“˜ TypeScript ๊ฐœ๋…์ •๋ฆฌ01

seoyoon_leeยท2026๋…„ 3์›” 27์ผ

TypeScript

๋ชฉ๋ก ๋ณด๊ธฐ
9/21
post-thumbnail

1๏ธโƒฃ npm init (ํ”„๋กœ์ ํŠธ ์‹œ์ž‘)

npm init -y

๐Ÿ‘‰ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด package.json์ด ์ƒ์„ฑ๋จ

๐Ÿ“Œ ์—ญํ• 

ํ”„๋กœ์ ํŠธ ์ •๋ณด ์ €์žฅ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ

๐Ÿ‘‰ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์„ค๋ช…์„œ

2๏ธโƒฃ @types/node (์™œ ํ•„์š”ํ•œ๊ฐ€?)

npm i @types/node

๐Ÿ‘‰ Node.js ๊ธฐ๋Šฅ์„ TypeScript๊ฐ€ ์ดํ•ดํ•˜๋„๋ก ๋„์™€์คŒ

console.log(process.version);

๐Ÿ‘‰ ์ด ์ฝ”๋“œ์—์„œ process๋ฅผ ์ธ์‹ํ•˜๋ ค๋ฉด ํ•„์š”ํ•จ

3๏ธโƒฃ tsc (TypeScript โ†’ JavaScript)

tsc

๐Ÿ‘‰ TypeScript๋ฅผ JavaScript๋กœ ๋ณ€ํ™˜

โœ” ์‹คํ–‰ ํ๋ฆ„
index.ts โ†’ (tsc) โ†’ index.js โ†’ node ์‹คํ–‰

๐Ÿ‘‰ Node.js๋Š” TypeScript๋ฅผ ์ง์ ‘ ์‹คํ–‰ ๋ชปํ•จ โŒ

4๏ธโƒฃ tsconfig.json

{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"moduleDetection": "force"
},
"include": ["src"]
}

โœ” ํ•ต์‹ฌ ์˜ต์…˜

target โ†’ JS ๋ฒ„์ „
module โ†’ import/export ๋ฐฉ์‹
rootDir โ†’ TS ์œ„์น˜
outDir โ†’ JS ๊ฒฐ๊ณผ ์œ„์น˜
strict โ†’ ์—„๊ฒฉ ๋ชจ๋“œ

5๏ธโƒฃ ts-node (๋ฐ”๋กœ ์‹คํ–‰)

npx tsx src/index.ts

๐Ÿ‘‰ ์ปดํŒŒ์ผ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

6๏ธโƒฃ ESM ์„ค์ • (์ค‘์š”๐Ÿ”ฅ)

"ts-node": {
"esm": true
}

โœ” ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ์„ค์ •

package.json
"type": "module"
tsconfig.json
"module": "esnext"

๐Ÿ‘‰ ์ด 3๊ฐœ๊ฐ€ ์„ธํŠธ

7๏ธโƒฃ strictNullChecks๋ž€?

"strictNullChecks": false

๐Ÿ‘‰ null / undefined๋ฅผ ํ—ˆ์šฉํ• ์ง€ ๊ฒฐ์ •

8๏ธโƒฃfalse์ผ ๋•Œ (์œ„ํ—˜ ๐Ÿ˜ฑ)

let name: string = "minji";
name = null; // ์—๋Ÿฌ ์•ˆ ๋‚จ

๐Ÿ‘‰ ์‹คํ–‰ ์ค‘ ํ„ฐ์ง ๊ฐ€๋Šฅ

9๏ธโƒฃ true์ผ ๋•Œ (์ถ”์ฒœ ๐Ÿ‘)

"strictNullChecks": true

let name: string = "minji";
name = null; // ์—๋Ÿฌ ๋ฐœ์ƒ

๐Ÿ‘‰ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ

๐Ÿ”Ÿ ์•ˆ์ „ํ•œ ์ฝ”๋“œ

let name: string | null = null;

์™œ ์ค‘์š”ํ•œ๊ฐ€?

๐Ÿ‘‰ ๋Œ€๋ถ€๋ถ„ JS ์—๋Ÿฌ ์›์ธ:

Cannot read property of null
undefined ์—๋Ÿฌ

๐Ÿ‘‰ ์ด๊ฑธ ๋ฏธ๋ฆฌ ๋ง‰์•„์คŒ

profile
Frontend Developer ยท ๊ธฐ๋ก โญ

0๊ฐœ์˜ ๋Œ“๊ธ€