๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์„ธ์˜ค์„ธ์˜ค | Frontend dev Seo
Learn to Code

[TS] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ช…์‹œ๊นŒ์ง€

by CEOSEO 2021. 7. 30.
728x90
๋ฐ˜์‘ํ˜•

 

๐ŸŒฑ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋…ธํŠธ ๊นƒํ—™

๋…ธํŠธ: src - index.ts

 

ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ, ์œ ๋‹ฌ๋ฆฌ ์—๋Ÿฌ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ To-do list๋ฅผ ๋ Œ๋”๋งํ•ด์•ผํ•  ๋•Œ ์ž๊พธ ์šฐ๋ฆฌ ์• ๊ฐ€ not a function ์ด๋ผ๋˜๊ฐ€ cannot get 0 of undefined๋ผ๋˜๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด๋‹ค. ๋ถ„๋ช…ํžˆ ์ฝ”๋“œ ์ƒ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ ์šฐ๋ฆฌ ์• ๋Š” not a function์ผ๋ฆฌ๊ฐ€ ์—†๊ณ  undefined ์ผ๋ฆฌ๊ฐ€ ์—†๋Š”๋ฐ ๋„๋Œ€์ฒด ์™œ ์ด๋Ÿฌ๋‚˜ ์‹ถ์—ˆ๋Š”๋ฐ... ๋‘๋‘ฅ

 

๋ฌธ์ œ์˜ ์›์ธ์€ ์„œ๋ฒ„์—์„œ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„œ๋กœ ๋‹ฌ๋ผ์„œ, ๋‚ด๊ฐ€ ์ฐพ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋‹ค๊ฑฐ๋‚˜ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๊ฑฐ๋‚˜ ํ•˜๋˜ ์ผ์ด ๊ณ„์† ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ์ด์ „์— ํ–ˆ๋˜ ์ž‘์€ ํ† ์ด ํ”„๋กœ์ ํŠธ๋“ค์€ ์•„๋ฌด๋ž˜๋„ ๊ทœ๋ชจ๋„ ์ž‘๊ณ  ๋ฐ›์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ๋„ ํ•œ์ •์ ์ด์—ฌ์„œ ์ด์™€ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ ์ด ์—†์—ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๋‹ด๋‹น ํŒ€์›๊ณผ ํ•จ๊ป˜ ํ…Œ์ŠคํŒ…์„ ํ•ด๊ฐ€๋ฉฐ ์—๋Ÿฌ๋Š” ๊ธˆ๋ฐฉ ์žก์•˜์ง€๋งŒ, ์ด๋•Œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์ •์˜ ํ•„์š”์„ฑ์„ ์ฒ˜์Œ์œผ๋กœ ๋Š๊ผˆ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ผญ ๋ฐฐ์›Œ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  ์ˆ˜๋ฃŒ๋ฅผ ํ•œ์ง€ ๋”ฑ ์ผ์ฃผ์ผ์ด ๋˜๋Š” ์ด ์‹œ์ , ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘ํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€๋ฅผ ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์„ค์น˜๋ถ€ํ„ฐ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

 

 

1. ๊ธฐ๋ณธ ์„ธํŒ…

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜

npm install -g typescript

 

์„ค์น˜๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„์ „ ์ฒดํฌ ํ•œ๋ฒˆ!

tsc --v

 

ํŒŒ์ผ๋ช…: .ts

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ .ts๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์˜ˆ: app.ts

 

 

์ปดํŒŒ์ผํ•˜๊ธฐ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ superset์ž„๊ณผ ๋™์‹œ์—, ์ปดํŒŒ์ผ๋Ÿฌ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ts ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•œ ๋‹ค์Œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

tsc app.ts

 

๋ช…๋ น์–ด tsc๋Š” ๋ง๊ทธ๋Œ€๋กœ TypeScript Compile์ด๋‹ค. ์š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋””๋ ‰ํ† ๋ฆฌ์— app.ts๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผํ•œ app.js ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ, ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ tsc ์ปดํŒŒ์ผ๋งŒ ํ•˜๋ฉด app.ts ํŒŒ์ผ์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์ž๋™์œผ๋กœ app.js์— ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๊ฑธ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„  ๋ช…๋ น์–ด์— -w๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. -w๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด watch mode์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , ํŒŒ์ผ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ (=์ฝ”๋“œ ๋ฐ”๊พธ๊ณ  ์ €์žฅํ–ˆ์„ ๋•Œ) ์ž๋™์œผ๋กœ ๊ทธ๊ฑธ ๊ฐ์ง€ํ•ด์„œ app.js์— ๋ฐ˜์˜์‹œ์ผœ์ค€๋‹ค.

 

tsc -w app.ts

 

ํ„ฐ๋ฏธ๋„์— ์ž‘์„ฑํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด watch mode์—์„œ ์ปดํŒŒ์ผ๋ง์„ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์•ˆ๋‚ด๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜จ๋‹ค.

watch mode ์‹œ์ž‘์˜ ์•Œ๋ฆผ

 

watch mode๊ฐ€ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ tsํŒŒ์ผ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ๋‚˜์˜ค๋Š” ๋ฌธ๊ตฌ.

 

 

 

 

tsconfig.json

tsc ์ฝ”๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด, ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•  ๋•Œ var ํ‚ค์›Œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ์ปดํŒŒ์ผ๋ง ์„ค์ •์ด let๊ณผ const๊ฐ€ ๋„์ž…๋˜๊ธฐ ์ด์ „์ธ es5๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ๊ณ ์ณ์ฃผ๊ธฐ ์œ„ํ•ด์„  tsconfig.json ํŒŒ์ผ์—์„œ ์ˆ˜์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

tsc --init

 

ํ„ฐ๋ฏธ๋„์— tsc --init๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ธฐ๋ณธ tsconfig.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ compilerOptions์˜ target์„ ๊ธฐ์กด์˜ "es5"์—์„œ "es6"๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  tsc ์ฝ”๋งจ๋“œ๋ฅผ ๋‹ค์‹œ ๋Œ๋ฆฌ๋ฉด, ๊ธฐ์กด์˜ ๋ชจ๋“  ts ์ปดํŒŒ์ผ๋ง ๊ฒฐ๊ณผ๋ฌผ๋“ค์ด es6๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ: ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์œ ์˜ํ•˜์ž!

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ •์  ํƒ€์ž…ํ•‘ (Static typing)์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ œ๊ณตํ•œ๋‹ค. ์ •์  ํƒ€์ดํ•‘์ด๋ž€, ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํŠน์ •ํ•˜๊ณ , ๊ทธ ํŠน์ •๋œ ํƒ€์ž…๋งŒ์ด ํ• ๋‹น ๋˜๋Š” ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์„ ๋œปํ•œ๋‹ค.์ด๋ฅผ ์œ„ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ๋ฐ”๋กœ ํƒ€์ž… ๋ช…์‹œ(type annotations)์™€ ํƒ€์ž… ์ถ”๋ก (type inference)์ด๋‹ค.

 

 

(1) ํƒ€์ž… ๋ช…์‹œ (Type annotations)

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋ณ€์ˆ˜ ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋ณ€์ˆ˜๋ช… ๋’ค์— : ์„ ๋ถ™์ด๊ณ , ๊ทธ ๋‹ค์Œ์— ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๋ฐ์ดํ„ฐ ํ• ๋‹น์„ ์œ„ํ•ด =๊ณผ ์ฃผ๊ณ  ์‹ถ์€ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

 

const IamString: string = "Hello from the other side"
const IamNumber: number = 123456789
const IamBoolean: boolean = true

 

 

ํ•จ์ˆ˜์˜ ์ธ์ž์™€ ๋ฆฌํ„ด๊ฐ’์—๋„ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

// doSomething ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ŠคํŠธ๋ง์ธ action ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค

function doSomething (action: string) {
	// something going on
}


// ๋ฆฌํ„ด๊ฐ’์— ํƒ€์ž… ๋ช…์‹œํ•˜๊ธฐ 

function doSomething (action: string): string {
	// something going on
    ...
    
    return 'Done!'
}

// ๋งŒ์•ฝ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ์—” void๋ผ๊ณ  ์ž‘์„ฑํ•œ๋‹ค!

function doSomething (action: string): void {
	// something going on
    ...
    ...
    // ๋ฆฌํ„ด ์—…์Šˆ
}

 

 

๊ฐ์ฒด์—๋„ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด๋Š” ๊ทธ ์•ˆ์˜ ํ”„๋กœํผํ‹ฐ & ๋ฉ”์†Œ๋“œ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

//ํ•จ์ˆ˜ ๋ฆฌํ„ด๊ฐ’์ด ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ
function createCharacter (name: string, job: string): {
  id: number;
  name: string;
  job: string;
  level: number;
  noob: boolean;
  walk: (position: number) => void;
  chat: (message: string) => string;
} {
  ...
    
  return {...}
}

// ํ•จ์ˆ˜ ์ธ์ž๊ฐ€ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ
function sayHello(person: { name: string; age: number }) {
  return `Hello ${person.name}`
}

 

๊ทธ๋Ÿฐ๋ฐ, ์œ„์™€ ๊ฐ™์ด ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ธ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ๋ฉด, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ interface์ด๋‹ค. interface๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ interface๋Š” ๋งˆ์น˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํ•œ ์ข…๋ฅ˜์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ์ง€์ •๋œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋ผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

// ์˜ˆ์ œ 1: ํ•จ์ˆ˜ ๋ฆฌํ„ด๊ฐ’์ด ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ

interface Character {
  id: number;
  name: string;
  job: string;
  level: number;
  noob: boolean;
  walk: (position: number) => void;
  chat: (message: string) => string;
}

function createCharacter (name: string, job: string): Character {
  ...
    
  return {...}
}


// ์˜ˆ์ œ 2 :ํ•จ์ˆ˜ ์ธ์ž๊ฐ€ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ

interface Person {
  name: string;
  age: number;
}

function sayHello(person: Person) {
  return `Hello ${person.name}`
}

 

๋˜ํ•œ, ๋งŒ์•ฝ์— ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ง€์ •๋œ ํ”„๋กœํผํ‹ฐ๋“ค ์ค‘์—์„œ ๋ฆฌํ„ด๊ฐ’์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด, ๊ทธ ๋ˆ„๋ฝ๋œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์นœ์ ˆํžˆ ์•Œ๋ ค์ค€๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ, ๋ฆฌํ„ด๊ฐ’์—์„œ ํŠน์ • ํ”„๋กœํผํ‹ฐ ํ•˜๋‚˜๋งŒ ๋นผ๊ณ  ๋‚˜์˜ค๋Š”๊ฒŒ ์˜๋„ํ•œ ๊ฒƒ์ด์—ˆ๋‹ค๋ฉด?! ๊ทธ๋Ÿด๋• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์˜ key ์˜†์— ?๋ฅผ ์‚ดํฌ์‹œ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. ?๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋Š” Optionalํ•œ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ, ๋ฆฌํ„ด๊ฐ’์ด ํ•ด๋‹น ์ธํผํŽ˜์ด์Šค๋กœ ์ง€์ •๋œ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์— ๊ทธ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

interface SurveyAnswers {
  personalInfo: boolean;
  marketingContact?: boolean;
}

 

< ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Utility Types >

๋งํฌ: https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype

 

 

(2) ํƒ€์ž… ์ถ”๋ก  (Type inference)

ํƒ€์ž… ์ถ”๋ก ์ด๋ž€, ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ฒ˜์Œ ํ• ๋‹น๋œ ๊ฐ’์˜ ํƒ€์ž…์„ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์ ธ์•ผํ•  ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ํ•˜์—ฌ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋œปํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ let number = 777๋กœ number๋ผ๋Š” ๋ณ€์ˆ˜์— ์ˆซ์ž 777์„ ํ• ๋‹นํ–ˆ๋‹ค๋ฉด, ๋‹ค์‹œ ์ด number๋ผ๋Š” ๋ณ€์ˆ˜์— ๋„˜๋ฒ„ ํƒ€์ž…์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ํ• ๋‹น๋  ์ˆ˜ ์—†๋‹ค. ํƒ€์ž… ์ถ”๋ก ์€ ๊ฐ์ฒด์™€ ํ•จ์ˆ˜์—๋„ ๋ชจ๋‘ ์ ์šฉ๋œ๋‹ค.

 

// ๋ณ€์ˆ˜ํƒ€์ž… ์ง€์ • ์—†์ด ์„ ์–ธ&ํ• ๋‹น๋œ number.
let number = 772

// ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
// ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
number = '์น ์น ์ด'

// ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ™์€ ๋„˜๋ฒ„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค
number = 773

 

๋„˜๋ฒ„ ํƒ€์ž…์— ์ŠคํŠธ๋ง ํƒ€์ž…์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€