๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿค Chapter 1: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

๐Ÿฆ„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?โ€‹

๐Ÿ‡ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž… ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ข‹์€ ์ด์œ โ€‹

  • ์˜ค๋Š˜๋‚  ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๋ฏ€๋กœ ๋ณดํ†ต ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด๋‚˜ ํŒ€์ด ํ˜‘๋ ฅํ•ด ํ•˜๋‚˜์˜ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•œ๋‹ค.
  • ํ•ญ์ƒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์ชฝ๊ณผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ ์‚ฌ์ด์— ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์ค‘์š”ํ•˜๋‹ค.
  • A๋ผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
function makePerson(name, age) {}
  • B๋ผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜๋ ค๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, B ๊ฐœ๋ฐœ์ž๋Š” ์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.
makePerson(32, 'Jack');
  • ๊ทธ๋Ÿฐ๋ฐ ์ฒ˜์Œ ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ์ฒ˜๋Ÿผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ๊ฐ€๋Šฅ์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ด๋‹ค.
function makePerson(name: string, age: number) {}
  • ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌธ์ œ์˜ ์›์ธ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‡ ํŠธ๋žœ์ŠคํŒŒ์ผโ€‹

  • ESNext ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋Š” ๋ฐ”๋ฒจ(Babel)์ด๋ผ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฑฐ์น˜๋ฉด ES5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • ๋ฐ”๋ฒจ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋Š” TSC(TypeScript complier)๋ผ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ES5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋Š” ํ…์ŠคํŠธ๋กœ ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๊ธด ์šฉ์–ด์ด๋‹ค.

๐Ÿฆ„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฃผ์š” ๋ฌธ๋ฒ• ์‚ดํŽด๋ณด๊ธฐโ€‹

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค๋ฃจ๋ ค๋ฉด ESNext ๋ฌธ๋ฒ•์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๋งŒ ๊ณ ์œ ํ•œ ๋ฌธ๋ฒ•๋„ ์žˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฌธ๋ฒ•์„ ๊ตฌ๋ถ„ํ•ด์„œ ์•Œ์•„๋ณด์ž.

๐Ÿ‡ ESNext์˜ ์ฃผ์š” ๋ฌธ๋ฒ• ์‚ดํŽด๋ณด๊ธฐโ€‹

  1. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น

ESNext๋Š” ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น(Destructuring Assignment)์ด๋ผ๊ณ  ํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ œ๊ณตํ•œ๋‹ค.
๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์€ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์–ป๋Š” ์˜ˆ์ œ
let person = { name: 'Jane', age: 22 };
let { name, age } = person; // name : Jane, age : 23

// ๋ฐฐ์—ด์— ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์ ์šฉํ•œ ์˜ˆ์ œ
let array = [1, 2, 3, 4];
let [head, ...rest] = array; // head = 1, rest = [2, 3, 4]

// ๊ฐ’์„ ์„œ๋กœ ๊ตํ™˜(swap)ํ•˜๋Š” ์˜ˆ
let a = 1, b = 2;
[a, b] = [b, a]; // a = 2, b = 1
  1. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

ESNext์—์„œ๋Š” function ํ‚ค์›Œ๋“œ ์™ธ์—๋„ ํ™”์‚ดํ‘œ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

// function ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
function add(a, b) {
return a + b;
}

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ
const add2 = (a, b) => a + b;

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด function ํ‚ค์›Œ๋“œ ๋ฐฉ์‹๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  1. ํด๋ž˜์Šค

ESNext์—์„œ๋Š” ํด๋ž˜์Šค๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด C++๋‚˜ Java ์–ธ์–ด์—์„œ ๋ณด๋˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•œ๋‹ค.
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์บก์Šํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•œ๋‹ค.

abstract class Animal {
constructor(public name?: string, public age?: number) {}
abstract say(): string
}

class Cat extends Animal {
say() {
return '์•ผ์˜น';
}
}

class Dog extends Animal {
say() {
return '๋ฉ๋ฉ';
}
}

let animals: Animal[] = [new Cat('์•ผ์˜น์ด', 2), new Dog('๋ฉ๋ฉ์ด', 3)];
let sounds = animals.map((a) => a.say()); // ['์•ผ์˜น', '๋ฉ๋ฉ']
  1. ๋ชจ๋“ˆ

๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์— export ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค๋ฉด ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

import * as fs from 'fs';
export function writeFile(filepath: string, content: any) {}
  1. ์ƒ์„ฑ๊ธฐ

yield๋ฌธ์€ ๋ฐ˜๋ณต์ž๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฐ˜๋ณต๊ธฐ(iterator)๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฐ˜๋ณต๊ธฐ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜๋ณต๊ธฐ ์ œ๊ณต์ž(iterable)๋ฅผ ํ†ตํ•ด ์–ป๋Š”๋‹ค.
์ด์ฒ˜๋Ÿผ yield๋ฌธ์„ ์ด์šฉํ•ด ๋ฐ˜๋ณต๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๋ฐ˜๋ณต๊ธฐ ์ œ๊ณต์ž๋ฅผ ์ƒ์„ฑ๊ธฐ(generator)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์ƒ์„ฑ๊ธฐ๋Š” function ํ‚ค์›Œ๋“œ์— ๋ณ„ํ‘œ(*)๋ฅผ ๊ฒฐํ•ฉํ•œ function*๊ณผ yield ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ yield๋Š” ๋ฐ˜๋“œ์‹œ function*์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜ ๋‚ด๋ถ•์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

function* gen() {
yield* [1, 2];
}

for(let value of gen()) {
console.log(value); // 1, 2
}

์œ„์˜ ์ฝ”๋“œ์—์„œ function*์„ ์ƒ์„ฑ๊ธฐ๋ผ๊ณ  ํ•œ๋‹ค.
yield๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ด ์ผ์‹œ ์ •์ง€ํ•œ ํ›„ ์ ํ”„ํ•ด์„œ for๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.
for๋ฌธ์„ ๋งˆ์น˜๋ฉด ๋‹ค์‹œ yield๋กœ ๋Œ์•„๊ฐ€๊ณ  ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

  1. Promise์™€ async/await ๊ตฌ๋ฌธ

ES5๋กœ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ๋ณต์žกํ•ด์ง€๊ณ  ๋ฒˆ๊ฑฐ๋กœ์›Œ์ง„๋‹ค.
Promise๋Š” ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
ESNext์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Promise ํ˜ธ์ถœ์„ ๊ฒฐํ•œ ์ข€ ๋” ๋ณต์žกํ•œ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ async/await ๊ตฌ๋ฌธ์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

async function get() {
let values = [];
values.push(await Promise.resolve(1));
values.push(await Promise.resolve(2));
values.push(await Promise.resolve(3));
return values;
}

get().then(value => console.log(values)); // [1, 2, 3]

async๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋Š” ๋ณธ๋ฌธ์—์„œ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
await๋Š” Promise ๊ฐ์ฒด๋ฅผ ํ•ด์†Œ(resolve)ํ•ด ์ค€๋‹ค. ๋”ฐ๋ผ์„œ getํ•จ์ˆ˜๋Š” [1, 2, 3] ๊ฐ’์„ Promise ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
get์ด ๋ฐ˜ํ™˜ํ•œ Promise ๊ฐ์ฒด๋Š” then ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์‹ค์ œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‡ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณ ์œ ์˜ ๋ฌธ๋ฒ• ์‚ดํŽด๋ณด๊ธฐโ€‹

  1. ํƒ€์ž… ์ฃผ์„๊ณผ ํƒ€์ž… ์ถ”๋ก 

๋‹ค์Œ ์ฝ”๋“œ์—์„œ ๋ณ€์ˆ˜ n๋’ค์—๋Š” ์ฝœ๋ก (:)๊ณผ ํƒ€์ž… ์ด๋ฆ„์ด ์žˆ๋‹ค.
์ด๊ฒƒ์ด ํƒ€์ž… ์ฃผ์„(type annotation)์ด๋ผ๊ณ  ํ•œ๋‹ค.

let n: number = 1;

๊ทธ๋Ÿฐ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž… ๋ถ€๋ถ„์„ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž… ๋ถ€๋ถ„์ด ์ƒ๋žต๋˜๋ฉด ๋Œ€์ž… ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋ถ„์„ํ•ด ์™ผ์ชฝ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•œ๋‹ค.
์ด๋ฅผ ํƒ€์ž… ์ถ”๋ก (type inference)์ด๋ผ๊ณ  ํ•œ๋‹ค.

let m = 2;

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์ถ”๋ก  ๊ธฐ๋Šฅ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ์™€ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ํฐ ์—ญํ• ์„ ํ•œ๋‹ค.
ํƒ€์ž… ์ถ”๋ก  ๋•๋ถ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ผ(.js)์€ ํ™•์žฅ์ž๋งŒ .ts๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐ”๋กœ ๋™์ž‘ํ•œ๋‹ค.

  1. ์ธํ„ฐํŽ˜์ด์Šค

์•„๋ž˜์˜ Person ์ธํ„ฐํŽ˜์ด์Šค๋Š” stringํƒ€์ž…์˜ name๊ณผ numberํƒ€์ž…์˜ age๋ฅผ ๊ฐ–๋Š”๋‹ค.
?๊ฐ€ ๋ถ™์€ ์†์„ฑ์€ ๊ฐ์ฒด์— ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ person๊ณผ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

let person: Person = { name: 'Jane' };
  1. ํŠœํ”Œ

ํŠœํ”Œ์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ™๋‹ค.
๋‹ค๋งŒ, ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ์•„์ดํ…œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด ๋ฐฐ์—ด, ๋‹ค๋ฅด๋ฉด ํŠœํ”Œ์ด๋‹ค.

let numberArray: number[] = [1, 2, 3]; // ๋ฐฐ์—ด
let tuple: [boolean, number, string] = [true, 1, 'Ok']; // ํŠœํ”Œ
  1. ์ œ๋„ค๋ฆญ ํƒ€์ž…

์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ํ•œ๊บผ๋ฒˆ์— ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
๋‹ค์Œ ์ฝ”๋“œ์—์„œ Container ํด๋ž˜์Šค๋Š” value ์†์„ฑ์„ ํฌํ•จํ•œ๋‹ค.
Container<number>, Container<string>, Container<number[]>, Container<boolean> ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์„ ๋Œ€์ƒ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

class Container<T> {
constructor(public value: T) {};
}

let numberContainer: Container<number> = new Container<number>(1);
let stringContainer: Container<string> = new Container<string>('Hello World');
  1. ๋Œ€์ˆ˜ ํƒ€์ž…

ADT๋ž€, ๋ฐ์ดํ„ฐ ํƒ€์ž…(abstract data type)์„ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋Œ€์ˆ˜ ํƒ€์ž…(algebraic data type)์ด๋ผ๋Š” ์˜๋ฏธ๋กœ๋„ ์‚ฌ์šฉ๋œ๋‹ค.
๋Œ€์ˆ˜ ํƒ€์ž…์ด๋ž€, ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ž๋ฃŒํ˜•์„ ์˜๋ฏธํ•œ๋‹ค.
๋Œ€์ˆ˜ ํƒ€์ž…์€ ํฌ๊ฒŒ ํ•ฉ์ง‘ํ•ฉ ํƒ€์ž…(union), ๊ต์ง‘ํ•ฉ ํƒ€์ž…(intersection) ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
ํ•ฉ์ง‘ํ•ฉ ํƒ€์ž…์€ | ๊ธฐํ˜ธ๋ฅผ, ๊ต์ง‘ํ•ฉ ํƒ€์ž…์€ & ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์Œ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๊ฒฐํ•ฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

type NumberOrString = number | string;
type AnimalAndPerson = Animal & Person;

๐Ÿฆ„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐโ€‹

๐Ÿ‡ scoop ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜โ€‹

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ Node.js ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋˜‘๊ฐ™๋‹ค.
  • ์ฆ‰, Node.js๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ์™€ ํฌ๋กฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ฐ”๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • scoop์œผ๋กœ ์„ค์น˜ํ•œ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ scoop update * ๋ช…๋ น์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค. (brew์™€ ๋น„์Šท..?)
  • scoop ๊ณต์‹ ์‚ฌ์ดํŠธ

๐Ÿ‡ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ ์„ค์น˜โ€‹

๐Ÿ‡ Node.js ์„ค์น˜โ€‹

// ๋ฒ„์ „ ํš์ธ
$ node --version

๐Ÿ‡ ๊ตฌ๊ธ€ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜โ€‹

๐Ÿ‡ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์น˜โ€‹

  • VSCode๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด typescript ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
> npm i -g typescript
> tsc -v
  • typescript ํŒจํ‚ค์ง€๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋™์ž‘ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ์ด๋ฆ„์€ ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ ๋‹ฌ๋ฆฌ tsc์ด๋‹ค. ์ฆ‰, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํด๋ผ์ด์–ธํŠธ๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋™์‹œ์— ์žˆ๋‹ค.

๐Ÿ‡ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๊ณผ ์‹คํ–‰โ€‹

// hello.ts
console.log('Hello world!');
  • ๋‹ค์Œ์ฒ˜๋Ÿผ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด hello.js ํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
> tsc hello.ts

compile

  • ์ฆ‰, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค๊ฐ€ TSC์— ์˜ํ•ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋˜์–ด hello.js ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.
  • Node.js๋กœ hello.js๋ฅผ ์‹คํ–‰ํ•ด๋ณธ๋‹ค.
> node hello.js
Hello world!

๐Ÿ‡ ts-node ์„ค์น˜โ€‹

  • tsc๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ES5 ํ˜•์‹์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋งŒ ํ•  ๋ฟ ์‹คํ–‰ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ES5๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰๊นŒ์ง€ ๋™์‹œ์— ํ•˜๋ ค๋ฉด ts-node๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
> npm i -g ts-node
  • ์„ค์น˜ ํ›„, --version์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ๋ฒ„์ „์„ ํ™•์ธํ•œ๋‹ค.
> ts-node --version
  • ์ด์ œ VSCode ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ปดํŒŒ์ผ๊ณผ ์‹คํ–‰์„ ๋™์‹œ์— ์ง„ํ–‰ํ•ด ๋ณธ๋‹ค.
> ts-node hello.ts
Hello world!