๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TypeScript

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋‚˜์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์šฐ๋ คํ•œ๋‹ค

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์•Œ๊ณ ๋‚˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋„ˆ๋ฌด๋„ˆ๋ฌด ๋ถˆํŽธํ•˜๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ํ•œ๋ฒˆ ์ฒดํ—˜ํ•ด๋ณด์ž ..!

 

 

 

โ“ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์จ์•ผํ•˜๋Š” ์ด์œ 

 

์—๋Ÿฌ์˜ ์‚ฌ์ „ ๋ฐฉ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋ฉด ๋งŽ์€ ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

 

function sum(a: number, b: number) {
  return a + b;
}

 

์œ„์™€ ๊ฐ™์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ sum์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ 

 

 

sum(10, 20); // 30

sum('10', '20'); // error

 

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, ์ฒซ๋ฒˆ์งธ ํ˜ธ์ถœ์€ ํ˜ธ์ถœ ์ธ์ž๋กœ number๊ฐ€ ๋“ค์–ด๊ฐ€์„œ ๋‘ ์ˆซ์ž๋ฅผ ํ•ฉํ•œ ๊ฐ’์„ ๋ฆฌํ„ด๋ฐ›์ง€๋งŒ

๋‘๋ฒˆ์งธ ํ˜ธ์ถœ์€ string ํƒ€์ž…์ด ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ฒŒ ๋œ๋‹ค

 

์ด๋ฐ–์—๋„ ์ด์ƒํ•œ ์˜คํƒ€๋ฅผ ๋‚ธ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ํƒ€์ž…๋ผ๋ฆฌ ๋น„๊ต๋ฅผ ํ•œ ๊ฒฝ์šฐ, null์ฒดํ‚น์„ ๋น ๋œจ๋ฆฐ ๊ฒฝ์šฐ์™€ ๊ฐ™์€ ์ƒํ™ฉ์—๋„ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์—๋””ํ„ฐ์—์„œ ๋ฐ”๋กœ ์—๋Ÿฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

 

 

IDE ๋ฅผ ๋”์šฑ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค


ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋™์™„์„ฑ ๋ฐ ํƒ€์ž… ์ฒดํ‚น์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ์ •๋ง ๋†’์•„์ง„๋‹ค.

ํ•จ์ˆ˜์— ์–ด๋–ค ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”์ง€, ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœํ•  ๋•Œ props ์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋˜, ๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฆฌ๋“€์„œ ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ณด์ง€ ์•Š๊ณ  ์ƒํƒœ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด ์กŒ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ”จ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์„ค์ •

 

๋จผ์ € ์ƒˆ๋กœ์šด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค 

 

$ mkdir ts-tutorial
$ cd ts-tutorial
$ yarn init -y # ๋˜๋Š” npm init -y

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธ€๋กœ๋ฒŒ๋กœ ์„ค์น˜ํ•ด์ค€๋‹ค 

 

$ yarn global add typescript # ๋˜๋Š” npm install -g typescript

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ํ•œ ์ดํ›„ ํ”„๋กœ์ ํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด tsconfig.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

 

$ tsc --init

 

tsconfig.json ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค

 

{
  "compilerOptions": {
    "module": "commonjs", // nodejs๋ฅผ ํ‰๋ฒ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ๊ฒƒ์„ import ๋˜๋Š” export ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
    "target": "es5", // ์–ด๋–ค ๋ฒ„์ „์˜ JS๋กœ ์ปดํŒŒ์ผ ๋˜๋Š”์ง€ ์ง€์ •
    "sourceMap": true,
    "outDir": "./dist", // // ts -> js ๋กœ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์„ dist๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ
    "strict": true,
    "esModuleInterop": true
  },

  "include": ["./src/**/*"], //ts ํŒŒ์ผ์€ ๋ชจ๋‘ src ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œ
  "exclude": ["node_modules"]
}

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ๋ช…๋ น์–ด tsc ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค 

ํŠน์ • ํŒŒ์ผ๋งŒ ์ปดํŒŒ์ผํ•˜๋Š” ๋ช…๋ น์–ด๋Š” tsc app.ts 

 

๋ณ€ํ™˜๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ /dist ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค 

 

์œ„์˜ ๊ตฌ์„ฑ์ฒ˜๋Ÿผ src ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” tsํŒŒ์ผ์ด ์žˆ๊ณ , dist ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” Js ํŒŒ์ผ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

๐Ÿ’ก ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธํƒ€์ž…

 

 

String

 

let str: string = 'hi';

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

Number

 

let num: number = 10;

 

 

ํƒ€์ž…์ด ์ˆซ์ž์ด๋ฉด ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค.

 

 

Boolean

 

let isLoggedIn: boolean = false;

 

 

ํƒ€์ž…์ด Boolean์ธ ๊ฒฝ์šฐ์—๋Š” ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค.

 

 

Array

 

let arr: number[] = [1,2,3];

 

 

ํƒ€์ž…์ด ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ์œ„์™€๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค.

 

 

let arr: Array<number> = [1,2,3];

 

 

์œ„์ฒ˜๋Ÿผ Generic์„ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

Enum

 

enum Avengers {
  Capt,
  IronMan,
  Thor,
}
let hero1: Avengers = Avengers.Capt;

 

 

Enum์€ ํŠน์ • ๊ฐ’(์ƒ์ˆ˜)๋“ค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

enum Avengers {
  Capt,
  IronMan,
  Thor,
}
let hero: Avengers = Avengers[0];

 

 

์ด๋„˜์€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Any

 

let strAny: any = 'hi';
let numAny: any = 10;
let arrAny: any = ['a', 2, true];

 

๊ธฐ์กด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋œ ์ฝ”๋“œ๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ํ™œ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 ๋‹จ์–ด ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๋ชจ๋“  ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

 

Void

 

let unuseful: void = undefined;
function notuse(): void {
  console.log('sth');
}

 

 

๋ณ€์ˆ˜์—๋Š” undefined์™€ null๋งŒ ํ• ๋‹นํ•˜๊ณ , ํ•จ์ˆ˜์—๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…์ด๋‹ค

C์–ธ์–ด์˜ Void ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๊ฐœ๋…์ธ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

Union Type

 

์œ ๋‹ˆ์˜จ ํƒ€์ž…(Union Type)์ด๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ OR ์—ฐ์‚ฐ์ž(||)์™€ ๊ฐ™์ด A์ด๊ฑฐ๋‚˜ B์ด๋‹ค ๋ผ๋Š” ์˜๋ฏธ์˜ ํƒ€์ž…์ด๋‹ค

 

let name: string | undefined = undefined; // string ์ผ์ˆ˜๋„ ์žˆ๊ณ  undefined ์ผ์ˆ˜๋„ ์žˆ์Œ
let age: number | null = null; // number ์ผ์ˆ˜๋„ ์žˆ๊ณ  null ์ผ์ˆ˜๋„ ์žˆ์Œ

let color: 'red' | 'orange' | 'yellow' = 'red'; // red, orange, yellow ์ค‘ ํ•˜๋‚˜์ž„
color = 'yellow';
color = 'green'; // ์—๋Ÿฌ ๋ฐœ์ƒ!

 

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด name ๋ณ€์ˆ˜์˜ ๊ฐ’์€ String๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ  undefined๊ฐ€ ๋“ค์–ด ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค age๋Š” number์ผ ์ˆ˜๋„, null์ผ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค

 

๋ณ€์ˆ˜ color์˜ ๊ฒฝ์šฐ์—๋„ red, orange, yellow์˜ ๊ฐ’์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ green์ด๋ผ๋Š” ๊ฐ’์ด ๋“ค์–ด์™€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

 

๐Ÿ’ก ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ๋ฒ•์˜ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด๋ณด์ž

 

 

//js
function sum(a, b) {
  return a + b;
}

//ts
function sum(a: number, b: number): number {
  return a + b;
}

 

 

๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ด๊ฐ’์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐˆ์ง€ ๋ช…์‹œํ•ด์ค€๋‹ค.

๋ฆฌํ„ด์„ ํ•˜์ง€์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” Void ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค

 

 

ํ•จ์ˆ˜์˜ ์ธ์ž

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ํ•„์ˆ˜ ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค ์ฆ‰ undefined๋‚˜ null์ด๋ผ๋„ ์ธ์ž๋กœ ๋„˜๊ฒจ์•ผํ•˜๋ฉฐ 

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ž๊ฐ€ ์ ๊ฑฐ๋‚˜ ๋งŽ์•„์„œ๋Š” ์•ˆ ๋œ๋‹ค

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž 

 

 

function sum(a: number, b: number): number {
  return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // error, too few parameters

 

 

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฒซ๋ฒˆ์งธ ํ˜ธ์ถœ์€ ํ•จ์ˆ˜์˜ ์ธ์ž์˜ ๊ฐœ์ˆ˜์— ๋งž๊ฒŒ ํ˜ธ์ถœ ํ–ˆ์ง€๋งŒ ๋‘๋ฒˆ์งธ์™€ ์„ธ๋ฒˆ์งธ๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž ๊ฐœ์ˆ˜์— ๋งž์ง€์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ธ์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” JS์˜ ํŠน์„ฑ์„ ์‚ด๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ?๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž

 

function sum(a: number, b?: number): number {
  return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // 10

 

 

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜ b์— ?๋ฅผ ์ถ”๊ฐ€ํ•ด์คŒ์œผ๋กœ์จ ์ธ์ž์˜ ๊ฐœ์ˆ˜์— ๋งž์ง€ ์•Š๊ฒŒ ํ˜ธ์ถœํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค 

๋‹จ, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•œ ํ˜ธ์ถœ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๐Ÿ’ก interface

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒํ˜ธ ๊ฐ„์— ์ •์˜ํ•œ ์•ฝ์† ํ˜น์€ ๊ทœ์น™์„ ์˜๋ฏธํ•œ๋‹ค

 

 

let person = { name: 'Song', age: 26 };

function logAge(obj: { age: number }) {
  console.log(obj.age); // 26
}
logAge(person); // 26

 

 

์œ„ logAge() ํ•จ์ˆ˜์—์„œ ๋ฐ›๋Š” ์ธ์ž์˜ ํ˜•ํƒœ๋Š” age๋ฅผ ์†์„ฑ์œผ๋กœ ๊ฐ–๋Š” ๊ฐ์ฒด์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ธ์ž๋ฅผ ๋ฐ›์„ ๋•Œ ๋‹จ์ˆœํ•œ ํƒ€์ž… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ์†์„ฑ ํƒ€์ž…๊นŒ์ง€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ interface๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž

 

 

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

interface animalInfo {
  name: string;
  age?: number;
  kind: string;
}

function logAge(obj: personInfo) {
  console.log(obj.age);
}

let person = { name: 'Song', age: 26, job: 'frontend' };
logAge(person);

const expert: animalInfo = {
  name: '๋˜˜์ด',
  kind: 'dog',
};

 

 

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅด ์ธ์ž๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์†์„ฑ ๊ฐฏ์ˆ˜์™€ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐฏ์ˆ˜๋ฅผ ์ผ์น˜ ์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ์†์„ฑ๊ณผ ํƒ€์ž…๋งŒ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐฏ์ˆ˜๊ฐ€ ๋” ๋งŽ์•„๋„ ์ƒ๊ด€ ์—†๋‹ค.

 

personInfo์˜ interface์˜ ์†์„ฑ๊ณผ animalInfo์˜ ์†์„ฑ์˜ ํ˜•ํƒœ๊ฐ€ ์œ ์‚ฌํ•˜๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” interface ๋ฅผ ์„ ์–ธ ํ•  ๋•Œ ๋‹ค๋ฅธ interface ๋ฅผ extends ํ•ด์„œ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜์˜ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž

 

 

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

interface animalInfo extends personInfo {
  kind: string;
}

function logAge(obj: personInfo) {
  console.log(obj.age);
}

let person = { name: 'Song', age: 26, job: 'frontend' };
logAge(person);

const expert: animalInfo = {
  name: '๋˜˜์ด',
  kind: 'dog',
};

 

 

animalInfo ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ personInfo ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ’์„ ์ƒ์† ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— personInfo์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค

 

 

๐Ÿ’ก Generic

 

์ œ๋„ค๋ฆญ์€ C#, Java ๋“ฑ์˜ ์–ธ์–ด์—์„œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ํŠน์ง•์ด๋‹ค. ํŠนํžˆ, ํ•œ๊ฐ€์ง€ ํƒ€์ž…๋ณด๋‹ค ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์—์„œ ๋™์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

function logText<T>(text: T): T {
  return text;
}

// #1   ๊ฐ€๋…์„ฑ ๋‚ฎ์Œ
const text = logText<string>("Hello Generic");
// #2   ๊ฐ€๋…์„ฑ ๋†’์•„์„œ ์ž์ฃผ ์‚ฌ์šฉ๋จ
const text = logText('Hello Generic');

//๋งŒ์•ฝ ๋ณต์žกํ•œ ์ฝ”๋“œ์—์„œ ๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ๋กœ ํƒ€์ž… ์ถ”์ •์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

console.log(text);

 

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด logText ํ•จ์ˆ˜๋ฅผ ์ œ๋„ค๋ฆญ์œผ๋กœ ์„ ์–ธํ•˜์˜€๋Š”๋ฐ ์ œ๋„ค๋ฆญ์€ ์–ด๋–ค ํƒ€์ž…์ด ๋“ค์–ด์™€๋„ ๋™์ž‘์„ ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

Any์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ Any์™€ ์ฐจ์ด์ ์œผ๋กœ๋Š” Any๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์–ด๋–ค ํƒ€์ž…์ด ๋“ค์–ด๊ฐ”๊ณ  ์–ด๋–ค ๊ฐ’์ด ๋ฐ˜ํ™˜ ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ œ๋„ค๋ฆญ์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋„˜๊ธด ํƒ€์ž…์— ๋Œ€ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

๐Ÿ’ก Type Alias

 

type์€ ํŠน์ • ํƒ€์ž…์— ๋ณ„์นญ์„ ๋ถ™์ด๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ํƒ€์ž…์„ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐฐ์—ด, ๋˜๋Š” ๊ทธ ์–ด๋–ค ํƒ€์ž…์ด๋˜ ๋ณ„์นญ์„ ์ง€์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค

 

์•„๋ž˜ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž

 

 

type personInfo {
  name: string;
  age?: number;
}

const person: personInfo = {
  name: 'ํ™๊ธธ๋™'
};

 

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์œ ์‚ฌํ•˜๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ฐจ์ด์ ์€ ํƒ€์ž…์˜ ํ™•์žฅ ๊ฐ€๋Šฅ, ๋ถˆ๊ฐ€๋Šฅ ์—ฌ๋ถ€์ด๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํƒ€์ž… ๋ณ„์นญ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค ๋”ฐ๋ผ์„œ, type ๋ณด๋‹ค๋Š” interface๋กœ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž

 

 

 

reference

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ธ๋“œ๋ถ

https://joshua1988.github.io/ts/

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ•ธ๋“œ๋ถ

 

joshua1988.github.io

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ์—ฐ์Šต

https://velog.io/@velopert/typescript-basics

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ์—ฐ์Šต

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์ „์—, ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ ํ•ต์‹ฌ์„ ๋‹ค๋ค„๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋”๋ผ ํ•˜๋”

velog.io