2. TypeScript

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • REPL

  • TypeScript

    • interface vs Type

    • ํƒ€์ž… ์ถ”๋ก 

    • Union Type vs Intersection Type

  • Optional Parameter

ํ˜„์‹ค์ ์œผ๋กœ TypeScript๋ฅผ ์“ฐ๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” vscode ์ž๋™์™„์„ฑ + ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ

์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ d.ts ํŒŒ์ผ๋งŒ ๋”ฐ๋กœ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋œ๋‹ค.

ํƒ€์ž… ๋ณ„์นญ (type alias)

๋˜‘๊ฐ™์€ ํƒ€์ž…์„ ํ•œ ๋ฒˆ ์ด์ƒ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

ํƒ€์ž…์„ ์œ„ํ•œ ์ด๋ฆ„์ด๋‹ค.

type Point = {
  x: number;
  y: number;
};
 
// ์•ž์„œ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์™€ ๋™์ผํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค
function printCoord(pt: Point) {
  console.log("The coordinate's x value is " + pt.x);
  console.log("The coordinate's y value is " + pt.y);
}

๊ฐ์ฒด ํƒ€์ž…๋ฟ์ด ์•„๋‹Œ ๋ชจ๋“  ํƒ€์ž…์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ง€ ๋ณ„์นญ์œผ๋กœ, ๋™์ผ ํƒ€์ž…์— ๋Œ€ํ•ด ๊ฐ๊ธฐ ๊ตฌ๋ณ„๋˜๋Š” '์—ฌ๋Ÿฌ ๋ฒ„์ „'์„ ๋งŒ๋“œ๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.

๋ณ„๋„๋กœ ์ด๋ฆ„ ๋ถ™์ธ ํƒ€์ž…์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ.

interface

๊ฐ์ฒด ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•.

ํƒ€์ž… ๋ณ„์นญ๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด์ 

๋น„์Šท ํ•˜์ง€๋งŒ ๋šœ๋ ทํ•œ ์ฐจ์ด๋Š”,

ํƒ€์ž…์€ ์ƒˆ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐœ๋ฐฉ๋  ์ˆ˜ ์—†๊ณ ,

์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ์šฐ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

type๋„ Bear ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ

ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” extends์˜ ๊ฐœ๋…์ด ์•„๋‹ˆ๊ณ  ๊ต์ง‘ํ•ฉ์„ ์ด์šฉํ•œ ๋ฐฉ์‹์ด๋ผ์„œ

ํ™•์žฅ ํ˜น์€ ๊ฐœ๋ฐฉ์ด ๋  ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ํ‘œํ˜„ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

๊ธฐ์กด์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ

ํƒ€์ž…์€ ์ƒ์„ฑ๋œ ๋’ค์—๋Š” ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์—†๋‹ค

์–ธ์ œ ์–ด๋–ค๊ฑธ ์จ์•ผํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์šฐ์„  interface ์“ฐ๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ type ์“ฐ๋ผํ•จ.

์ •ํ•ด์ง„ ๊ฐ’์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Ÿฐ ํƒ€์ž…์€ Union์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค.

๋ฐฐ์—ด๋ณด๋‹ค ๊น๊นํ•œ Tuple ํƒ€์ž…์ด ์žˆ๋‹ค.

Union Type

์—ฌ๋Ÿฌ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜.

๋งค๊ฐœ๋ณ€์ˆ˜ ์ œํ•œํ• ๋•Œ ๋งค์šฐ ์œ ์šฉ

๊ธฐ๋ณธ๊ฐ’์„ ์žก์•„์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์˜ค๋ธŒ์ ํŠธ์ผ ๊ฒฝ์šฐ

โ†’ ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ts-node์—์„  ์•„์‰ฝ๊ฒŒ๋„ ํ•ด์„ ๋ถˆ๊ฐ€.

์•„๋ž˜์ฒ˜๋Ÿผ ํ•œ ์ค„๋กœ ๋ถ™์—ฌ์„œ ์“ฐ๊ฑฐ๋‚˜, type ๋“ฑ์œผ๋กœ ๋”ฐ๋กœ ์žก์•„์ฃผ๋ฉด ๋œ๋‹ค.

Intersection Type

  • ๊ต์ง‘ํ•ฉ

  • Intersection Types

interfaces๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์œ ํ˜•์„ ํ™•์žฅํ•˜์—ฌ ์ƒˆ ์œ ํ˜•์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

Generics

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ.

ํ˜„์žฌ์˜ ๋ฐ์ดํ„ฐ์™€ ๋ฏธ๋ž˜์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋‘๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

๋‹จ์ผ ํƒ€์ž…์ด ์•„๋‹Œ ๋‹ค์–‘ํ•œ ํƒ€์ž…์—์„œ ์ž‘๋™ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

any๋Š” ์–ด๋–ค ํƒ€์ž…์ด๋“  ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์˜ ํƒ€์ž…์„ ์žƒ๋Š”๋‹ค.

number๊ฐ’์„ ๋„˜๊ฒจ๋„ any ํƒ€์ž…์ด ๋ฐ˜ํ™˜๋œ๋‹ค๋Š” ์˜๋ฏธ.

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์ด ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ˆ˜์˜ ํƒ€์ž…์„ ์บก์ฒ˜ํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’์ด ์•„๋‹Œ ํƒ€์ž…์— ์ ์šฉ๋˜๋Š” ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Type๋ผ๋Š” ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

Type์€ ์œ ์ €๊ฐ€ ์ค€ ์ธ์ˆ˜์˜ ํƒ€์ž…์„ ์บก์ฒ˜ํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ ๋‹ค์‹œ ์‚ฌ์šฉ.

์ด ๋ฒ„์ „์˜ identity ํ•จ์ˆ˜๋Š” ํƒ€์ž…์„ ๋ถˆ๋ฌธํ•˜๊ณ  ๋™์ž‘ํ•˜๋ฏ€๋กœ ์ œ๋„ค๋ฆญ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

any๋ฅผ ์“ฐ๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ธ์ˆ˜์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์— number๋ฅผ ์‚ฌ์šฉํ•œ ์ฒซ ๋ฒˆ์งธ identity ํ•จ์ˆ˜๋งŒํผ ์ •ํ™•.

(์ฆ‰, ์–ด๋–ค ์ •๋ณด๋„ ์žƒ์ง€ ์•Š๋Š”๋‹ค)

๋” ์ข‹์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ ๋งŒ๋“œ๋Š” 11๊ฐ€์ง€ ํŒ

Last updated