6/25 TIL (TypeScript)

Hwiยท2024๋…„ 6์›” 25์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
56/96

๐Ÿ“– ์ง„ํ–‰ํ•œ ๊ณต๋ถ€ ๐Ÿ“–

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv 1. ๋ฌธ์ž์—ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ
  • TypeScript ๊ธฐ์ดˆ

๋ฌธ์ž์—ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ

๋ฌธ์ž์—ด s์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž๋ฅผ ํฐ๊ฒƒ๋ถ€ํ„ฐ ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
s๋Š” ์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋Œ€๋ฌธ์ž๋Š” ์†Œ๋ฌธ์ž๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • str์€ ๊ธธ์ด 1 ์ด์ƒ์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
s = "Zbcdefg" return = "gfedcbZ"

๋‚˜์˜ ํ’€์ด

function solution(s) {
    return s.split("").sort().reverse().join("");
}

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์ธ sort() ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด split("") ๋กœ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊พธ๋กœ ๋ฐ”๊ฟ”์ค€ ๋’ค, ๋‹ค์‹œ join("")์„ ํ†ตํ•ด ๋ฌธ์ž์—ด๋กœ ๋ณต๊ท€

TypeScript ๊ธฐ์ดˆ

TypeScript = JavaScript + ํƒ€์ž… ์‹œ์Šคํ…œ

์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅํŒฉ
์ •์  ํƒ€์ž…์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์–ธ์–ด
ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์ „ (์ปดํŒŒ์ผ ํƒ€์ž„)์— ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ํ‘œํ˜„์‹์˜ ํƒ€์ž…์„ ํ™•์ธํ•˜๊ณ  ๊ณ ์ •ํ•˜๋Š” ๋ฐฉ์‹, ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌ

์ •์  ์‹œ์Šคํ…œ์ด ์ข‹์€ ์ด์œ 

  • ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌ
  • ๋” ๋น ๋ฅธ ์‹คํ–‰
  • ์•ˆ์ •์„ฑ

๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ js์˜ ๋‹จ์ ์€ ๋งค์šฐ ์ž์œ ๋กญ๊ณ  ๋ชจ๋“  ๊ฑธ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค! ์—์„œ ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ
์ด ๋ฌธ์ œ์ ์„ ์ •์  ํƒ€์ž…์‹œ์Šคํ…œ์œผ๋กœ ๋ณด์™„ํ•œ ํ›Œ๋ฅญํ•œ ์–ธ์–ด๊ฐ€ ts

ts๋Š” js์™€ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ํ™•์žฅํŒฉ ๊ทธ ์ด์ƒ ๊ทธ ์ดํ•˜๋„ ์•„๋‹˜

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ts๋Š” js๋กœ 100% ์ปดํŒŒ์ผ ๋จ

์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ํƒ€์ž…
1. number(์ˆซ์ž)
2. string(๋ฌธ์ž์—ด)
3. Boolean(๋ถˆ๋ฆฌ์–ธ)
4. Object : Array(๋ฐฐ์—ด), Function(ํ•จ์ˆ˜)
5. Void
6. undefined
7. any
8. null

์ด๋Ÿฐ ์›์‹œํƒ€์ž…๋“ค์€ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” built-in type๋“ค์ž„
์šฐ๋ฆฐ Custom Type๋“ค์ด ํ•„์š”ํ•จ

type alias(ํƒ€์ž… ๋ณ„์นญ) ๊ณผ interface ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ (์ค‘๋ณต ์„ ์–ธ ๊ฐ€๋Šฅ)

ํƒ€์ž…์ถ”๋ก ๊ณผ ์–ด๋…ธํ…Œ์ด์…˜

ํƒ€์ž…์ถ”๋ก 
TypeScript๋Š” ์ฝ”๋“œ์—์„œ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„, ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์„ ํ†ตํ•ด ํƒ€์ž…์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Œ. ํƒ€์ž… ์ถ”๋ก ์€ TypeScript์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ

์ด์ฒ˜๋Ÿผ ํƒ€์ž…์ถ”๋ก ์— ์˜์กดํ•˜๊ฒŒ ๋˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•์ธ ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์—์„œ ๋ฉ€์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ ํƒ€์ž…์„ ์ž‘์„ฑํ•  ๋•Œ, ๊ผผ๊ผผํžˆ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ

ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜
์šฐ๋ฆฌ๊ฐ€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜ ์ด๋ผ๋Š” ๊ฒƒ์„ ํ•ด์ค˜์•ผ ํ•จ

๋ฐฉ๋ฒ•์€ ๋งค์šฐ ์‰ฌ์›€. ์šฐ๋ฆฌ๊ฐ€ ํƒ€์ž…์„ ์“ฐ๋ ค๊ณ  ํ•˜๋Š” ๊ณณ ์•ž์—๋‹ค๊ฐ€ :์„ ๋ถ™์ด๊ณ  ํƒ€์ž…์„ ์„ค๋ช…ํ•ด์ฃผ๋ฉด ๋จ ex) : number

๊ตฌ์กฐ์  ํƒ€์ž…
ts์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์€ ๊ตฌ์กฐ์  ํƒ€์ž… ์‹œ์Šคํ…œ์ž„. ๊ตฌ์กฐ์  ํƒ€์ž… ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฐ’์˜ ํ˜•ํƒœ์™€ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ํƒ€์ž…์ด ๊ฒฐ์ •. ์ฆ‰, ํƒ€์ž…์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์„ ์–ธ๋˜์—ˆ๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ, ์–ด๋–ค ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๊ฐ€ ์ค‘์š”

์ œ๋„ค๋ฆญ
ํƒ€์ž…์„ ๋งˆ์น˜ ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

๊ทธ๋Ÿผ ์–ด๋–จ ๋•Œ ์“ฐ์ž„?
๋ง ๊ทธ๋Œ€๋กœ Type์„ ๋ณ€์ˆ˜ํ™” ํ•ด์„œ ์ฃผ์ž…ํ•œ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•  ๋•Œ

03. .d.ts ํŒŒ์ผ ์•Œ์•„๋ณด๊ธฐ

  • .d.ts ํŒŒ์ผ์€ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ TypeScript ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ณด๋ฌผ

@types ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋“ฑ์žฅ

  • TypeScript๋Š” @types ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ œ๊ณต
  • ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด .d.js ํŒŒ์ผ๋“ค์ด ๋งŽ์ด ์žˆ์Œ

.d.ts ํŒŒ์ผ์˜ ์ •์ฒด

  • .d.ts ํŒŒ์ผ์€ TypeScript ํƒ€์ž… ์ •์˜ ํŒŒ์ผ
    ์ฆ‰, JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํƒ€์ž… ์ •๋ณด ์ œ๊ณต

  • .d.ts ํŒŒ์ผ๋กœ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜ ํƒ€์ž… ์ •๋ณด
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋ž˜์Šค ํƒ€์ž… ์ •๋ณด
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ์ฒด ํƒ€์ž… ์ •๋ณด
  • .d.ts ํŒŒ์ผ๋กœ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํƒ€์ž… ์ถ”๋ก ๋„ ๊ฐ€๋Šฅ

    • ํƒ€์ž… ์ถ”๋ก ์ด๋ž€, ํƒ€์ž…์ด ๋ช…์‹œ ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ํ•ด๋‹น ํƒ€์ž…์— ๋Œ€ํ•ด ์ถ”๋ก ํ•˜๋Š” ๊ฒƒ

JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ TypeScript์—์„œ?

  • ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ .d.ts ํŒŒ์ผ๋งŒ ์ œ๊ณตํ•ด์ฃผ๋ฉด ๋จ
  • TypeScript ํ”„๋กœ์ ํŠธ์—์„œ๋„ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•œ ์ค„๋„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ

์‹ค์Šต - js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ts์—์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

  1. ์šฐ์„  Node.js๋ฅผ ์ƒ์„ฑ
    npm init -y

  2. tsconfig.json ์ƒ์„ฑ
    tsc --init

  3. tsconfig.json์—์„œ ์•„๋ž˜ ์˜ต์…˜ ์ฃผ์„ ํ•ด์ œ
    "allowJs": true "checkJs": true

  4. ์ปค์Šคํ…€ js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ

/**
 * @param {number} a
 * @param {number} b
 * @returns {number}
 */
export function add(a, b) { // export๋ฅผ ๋„ฃ์ง€ ์•Š์œผ๋ฉด import ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ์•„์‹œ์ฃ ?
  return a + b;
}
  1. ์œ„ ์ฃผ์„๋ฌธ์€ JSDoc ๋ผ๊ณ  ํ•จ
  2. JSDoc์€ API์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ (์ธ์ž, ๋ฆฌํ„ด ํƒ€์ž…)์„ ์„ค๋ช…ํ•˜๋Š” HTML ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ
  3. JSDoc๋กœ js ์†Œ์Šค์ฝ”๋“œ์— ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Œ

01. ํƒ€์ž…์„ ์™œ ์ œ๋Œ€๋กœ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€?

1) ๋ณ€์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…์— ๋Œ€ํ•˜์—ฌ

๋ณ€์ˆ˜๋ž€?

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„

๋ณ€์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…

  • ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์ด ์žˆ์Œ

    • ์ˆซ์ž, ๋ฌธ์ž์—ด, ๋…ผ๋ฆฌ๊ฐ’, ๋ฐฐ์—ด, ๊ฐ์ฒด ๋“ฑ
  • ํƒ€์ž…์„ ์ดํ•ดํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ / ์•ˆ์ •์„ฑ ํ–ฅ์ƒ

2) ์ž˜๋ชป๋œ ํƒ€์ž… / ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…

์ž˜๋ชป๋œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

  • ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ์‹คํ–‰ ์‹œ๊ฐ„์— ๋ฐœ์ƒํ•จ
  • ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

  • ํƒ€์ž… ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง€๊ณ  ์ฝ”๋“œ ํ’ˆ์งˆ์ด ์ข‹์•„์ง
  • ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

02. ๊ธฐ๋ณธ ํƒ€์ž… ํ›‘์–ด๋ณด๊ธฐ

1) boolean

์ฐธ(true) ํ˜น์€ ๊ฑฐ์ง“(false) ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ„
์กฐ๊ฑด๋ฌธ, ๋น„๊ต ์—ฐ์‚ฐ ๋“ฑ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ

์‚ฌ์šฉ ์˜ˆ์‹œ

function inValidPassword(password: string): boolean {
	return password.length >= 8;
}

const password = "q1w2e3r4";
const valid = isValidPassword(password);

if (valid) {
	console.log("์œ ํšจ");
} else {
	console.log("์œ ํšจ X");
}

2) number

TypeScript์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ„
๋ชจ๋“  ์ˆ˜์น˜ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์€ number ํƒ€์ž…์œผ๋กœ ๋ช…์‹œ

์‚ฌ์šฉ ์˜ˆ์‹œ

function calculateArea(radius: number): number {
	return Math.PI * radius * radius;
}

const radius = 5;
const area = calculateArea(radius);
console.log(`๋ฐ˜์ง€๋ฆ„์ด ${radius}์ธ ์›์˜ ๋„“์ด: ${area}`)'

Math.PI x radius x radius์™€ ๊ฐ™์ด ๋ฌด๋ฆฌ์ˆ˜์™€ ์ •์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’๋„ number๋กœ ์ทจ๊ธ‰์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— calculateArea ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…๋„ number

3) string

์ž‘์€ ๋”ฐ์˜ดํ‘œ('), ํฐ ๋”ฐ์˜ดํ‘œ("), ๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด ํ‘œํ˜„ ๊ฐ€๋Šฅ
ํ…์ŠคํŠธ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉ

function greet(name: string): string {
	return `์•ˆ๋…•, ${name}!`;
}

const name = "Spartan";
const greeting = greet(name);
console.log(greeting);

4) ๋ฐฐ์—ด

๊ธฐ๋ณธ ํƒ€์ž…์— []๊ฐ€ ๋ถ™์€ ํ˜•ํƒœ

์‚ฌ์šฉ ์˜ˆ์‹œ

function calculateSum(numbers: number[]): number {
	let sum: number = 0;
  for (let i = 0; i < numbers.length; i++) {
  	sum += numbers[i];
  }
  return sum;
}

const testScores: number[] = [90, 85, 78, 92, 88];
const sumScore = calculateSum(testScores);

5) ํŠœํ”Œ(tuple)

์„œ๋กœ ๋‹ค๋ฅธํƒ€์ž…์˜ ์›์†Œ๋ฅผ ์ˆœ์„œ์— ๋งž๊ฒŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ๋ฐฐ์—ด

์‚ฌ์šฉ ์˜ˆ์‹œ

const person: [string, number, boolean] = ["Spartan", 25, false];

const person2: [string, number, boolean] = [25, "Spartan", false]; // ์˜ค๋ฅ˜!

์ •์˜๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๊ฐœ์ˆ˜์™€ ์ˆœ์„œ์— ๋งž์ถ”๋Š” ๊ฒƒ์ด ํ•„์ˆ˜

6) enum

์—ด๊ฑฐํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋ผ ๋ถ€๋ฆ„
enum ์•ˆ์— ์žˆ๋Š” ๊ฐ ์š”์†Œ๋Š” ๊ฐ’์ด ์„ค์ •๋ผ ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆซ์ž 0์œผ๋กœ ์‹œ์ž‘ํ•จ
enum ์•ˆ์— ์žˆ๋Š” ์š”์†Œ์—๋Š” number, string ํƒ€์ž…์˜ ๊ฐ’๋งŒ ํ• ๋‹น O

์‚ฌ์šฉ ์˜ˆ์‹œ

enum UserRole {
  ADMIN = "ADMIN",
  EDITOR = "EDITOR",
  USER = "USER",
}

enum UserLevel {
  NOT_OPERATOR, // 0
  OPERATOR // 1
}

function checkPermission(userRole: UserRole, userLevel: UserLevel): void {
  if (userLevel === UserLevel.NOT_OPERATOR) {
    console.log('๋‹น์‹ ์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๋ ˆ๋ฒจ์ด์—์š”');
  } else {
    console.log('๋‹น์‹ ์€ ์šด์˜์ž ๋ ˆ๋ฒจ์ด๊ตฐ์š”');
  } 

  if (userRole === UserRole.ADMIN) {
    console.log("๋‹น์‹ ์€ ์–ด๋“œ๋ฏผ์ด๊ตฐ์š”");
  } else if (userRole === UserRole.EDITOR) {
    console.log("๋‹น์‹ ์€ ์—๋””ํ„ฐ์—์š”");
  } else {
    console.log("๋‹น์‹ ์€ ์‚ฌ์šฉ์ž๊ตฐ์š”");
  }
}

const userRole: UserRole = UserRole.EDITOR;
const userLevel: UserLevel = UserLevel.NOT_OPERATOR;
checkPermission(userRole, userLevel);

03. readonly

const์™€ readonly๋Š” ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅ

TypeScript ์—์„œ ๋“ฑ์žฅํ•œ ํ‚ค์›Œ๋“œ์ด๋ฉฐ, ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ
์ฆ‰, ํด๋ž˜์Šค์˜ ์†์„ฑ์ด๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ

์‚ฌ์šฉ ์˜ˆ์‹œ

class Person {
	readonly name: string;
  	readonly age: number;
  
  constructor(name: string, age: number) {
  	this.name = name;
    this.age = age;
  }
}

const person = new Person('Spartan', 30);

console.log(person.name); // ์ถœ๋ ฅ: 'Spartan'
console.log(person.age); // ์ถœ๋ ฅ: 30

person.name = 'Jane'; // ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ์ด๊ธฐ์— ์˜ค๋ฅ˜ ๋œธ
person.age = 25; // ์œ„์™€ ๊ฐ™์Œ

readonly๋ฅผ const๋กœ ์น˜ํ™˜ํ•˜๋ฉด ํด๋ž˜์Šค์˜ ์†์„ฑ์— const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•จ

04. any์™€ unknown, union

์–ด์ฉ” ์ˆ˜ ์—†์ด ๊ฐ€๋ณ€์ ์ธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด any๋ฅผ ์“ฐ๊ธฐ ๋ณด๋‹จ unknown์„ ์‚ฌ์šฉ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋ณ€ ์ ์ธ ํƒ€์ž…์„ ์ผ์ผ์ด ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด union ์‚ฌ์šฉ์ด ์ œ์ผ ๋‚˜์Œ

1) any ํƒ€์ž…

๋ชจ๋“  ํƒ€์ž…์˜ ์Šˆํผํƒ€์ž…
์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์ด๋“  ์ €์žฅํ•  ์ˆ˜ ์ž‡์Œ
JavaScript์˜ Object ํƒ€์ž…๊ณผ ๊ฐ™์€ ์ตœ์ƒ์œ„ ํƒ€์ž…

์‚ฌ์šฉ ์˜ˆ์‹œ

let anything: any;
anything = 5; // ์ˆซ์ž๋„ ๊ฐ€๋Šฅ
anything = "hello"; // ๋ฌธ์ž์—ด๋„ ๊ฐ€๋Šฅ
anything = {id:1, name: 'john'}; // JSON๋„ ๊ฐ€๋Šฅ

2) TypeScript์—์„œ any๋ฅผ ์“ฐ๋Š” ๊ฒŒ ๋งž๋Š”์ง€?

  • ์ฃผ๋œ ์ด์œ ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ ํ™•๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ
  • ๊ทธ๋Ÿฌ๋‚˜ ์•„์ฃผ ์œ„ํ—˜ํ•œ ์• ์ž„
  • ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ์Œ

3) unknown ํƒ€์ž…

any ํƒ€์ž…๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋” ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
์–˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’ ์ €์žฅ ๊ฐ€๋Šฅ
ํ•˜์ง€๋งŒ, ๊ทธ ๊ฐ’์„ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ํ™•์ธํ•ด์•ผ ํ•จ

let unknownValue: unknown = '๋‚˜๋Š” ๋ฌธ์ž์—ด';
console.log(unknownValue); // ๋‚˜๋Š” ๋ฌธ์ž์—ด

let stringValue: string;
stringValue = unknownValue; // ์—๋Ÿฌ ๋ฐœ์ƒ, string์ž„์ด ๋ณด์žฅ์ด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ
stringValue = unknownValue as string;
console.log(stringValue); // ๋‚˜๋Š” ๋ฌธ์ž์—ด

stringValue = unknownValue as string;์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ
Type Assertion(ํƒ€์ž… ๋‹จ์–ธ)์ด๋ผ๊ณ  ํ•จ

unknown ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํƒ€์ž… ๋‹จ์–ธ์„ ํ†ตํ•ด ํƒ€์ž… ๋ณด์žฅ์„ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

let unknownValue: unknown = '๋‚˜๋Š” ๋ฌธ์ž์—ด์ด์ง€๋กฑ!';
let stringValue: string;

if (typeof unknownValue === 'string') {
  stringValue = unknownValue;
  console.log('unknownValue๋Š” ๋ฌธ์ž์—ด์ด๋„ค์š”~');
} else {
  console.log('unknownValue๋Š” ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค~');
}

typeof ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํƒ€์ž… ์ฒดํฌ๋ฅผ ๋ฏธ๋ฆฌํ•œ ํ›„ unknown ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ string ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ

4) union

unknown์˜ ํ•œ๊ณ„ = ์žฌํ• ๋‹น์ด ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ X

๋ฐ˜๋ฉด union์€ ์—ฌ๋Ÿฌ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ | ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ‘œํ˜„

type StringOrNumber = string | number; // ๋’ค์— ๋‹ค๋ฅธ ํƒ€์ž… ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

function processValue(value: StringOrNumber) {
	if (typeof value === 'string') {
    	// value๋Š” ์—ฌ๊ธฐ์„œ string ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ
      console.log('String value:', value);
    } else if (typeof value === 'number') {
    	// value๋Š” ์—ฌ๊ธฐ์„œ number ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ
      console.log('Number value:', value);
    }
}

processValue('Hello');
processValue(42);

5) ์žŠ์ง€ ๋ง์•„์•ผ ํ•  ๊ฒƒ

  • TypeScript๋ฅผ ์“ฐ๋ฉด์„œ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋กœ ํ•ด๊ฒฐํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์€ ๊ฐ€๊ธ‰์  ์ง€์–‘
  • ์ด๋Ÿฐ ์‚ฌ์†Œํ•œ ์Šต๊ด€๋“ค์ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌ
profile
๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด~~~

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