Meme's IT

[TypeScript] TypeScript ๊ธฐ๋ณธ์ง€์‹ ๋ณธ๋ฌธ

FrontEnd/TypeScript

[TypeScript] TypeScript ๊ธฐ๋ณธ์ง€์‹

Memez 2024. 6. 28. 02:36

๐ŸŽง ํƒ€์ž… ์ง€์ •

๋ณ€์ˆ˜ ๋งŒ๋“ค ๋•Œ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Œ

let name :string = 'Mino'

๋ณ€์ˆ˜๋ช… :ํƒ€์ž…๋ช… ์˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ

 

ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋“ค

string, number, boolean, bigint, null, undefined, [], {}

 

ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ์ด์œ ?

JS์—์„œ๋Š” ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ชจํ˜ธํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์ง€๋งŒ,

ํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋””์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”์ง€ ์•Œ๊ธฐ ํŽธํ•จ

= ํƒ€์ž… ๊ด€๋ จ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ฒจ๋„ ๋น ๋ฅด๊ฒŒ ๋””๋ฒ„๊น… ๊ฐ€๋Šฅ

let name :string = 'Mino'
name = 123   // ์—ฌ๊ธฐ์„œ ์—๋Ÿฌ๊ฐ€ ์ƒ๊น€

 

๋งŒ์•ฝ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด?

ํ•ด๋‹น ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด | ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•จ

let name :string | number = 'Mino'
name = 123   // ์ด๋ฒˆ์—” ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์Œ

 

ํƒ€์ž…๋„ ๋ณ€์ˆ˜๋กœ ๊ฐ€๋Šฅํ•จ

type์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํƒ€์ž…์„ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!

type nameType = string | number
let name :nameType = 'Yong'

 

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ string, number๋ง๊ณ ๋„ ๋‚ด๊ฐ€ ์ปค์Šคํ…€๋„ ๊ฐ€๋Šฅํ•จ

type nameType = 'Yong' | 'Bok'
let name :nameType = 'Yong'   // ์—ฌ๊ธด 'Yong'๊ณผ 'Bok'๋ฐ–์— ๋ชป๋“ค์–ด๊ฐ

์ด๋Ÿฐ์‹์œผ๋กœ ์“ฐ๋Š” ๊ฑธ literal type์ด๋ผ๊ณ  ํ•จ(๋ฌธ์„œ ์ฐธ๊ณ )

 

๐ŸŽจ ํ•จ์ˆ˜

TypeScript๋Š” ํ•จ์ˆ˜์˜ parameter๊ณผ return๊ฐ’๋„ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Œ

function ํ•จ์ˆ˜๋ช…(x :number) :number{
  return x * 2
}

๋งŒ์•ฝ ๋‹ค๋ฅธ ํƒ€์ž…์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ return๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚จ

 

void ํƒ€์ž…

๐Ÿ’ก void๋Š” ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ํƒ€์ž…์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ๊ณ  ๊ฐ€์ด๋“œ๋ถ์ด ๊ทธ๋Ÿฝ๋‹ˆ๋‹ค

๊ทธ๋‹ˆ๊นŒ ๊ฒฐ๊ณผ ๊ฐ’์ด ์—†๋‹ค๋ฉด, void ์จ์ฃผ๋ฉด ๋˜๋Š” ๋“ฏ

 

ํ•จ์ˆ˜์—์„œ๋Š” ํƒ€์ž…์„ ํ™•์‹คํžˆ ํ•˜์ž

//์—๋Ÿฌ
function ํ•จ์ˆ˜๋ช…(x :number | string) {
  return x * 2
}

//๊ฐ€๋Šฅ
function ํ•จ์ˆ˜๋ช…(x :number | string) {
  if (typeof x === 'number'){
    return x * 2
  } 
}

TypeScript์—์„œ๋Š” ์ง€๊ธˆ์˜ ๋ณ€์ˆ˜ ํƒ€์ž…์ด ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค๋ฉด ์—ฐ์‚ฐ์ด ์•ˆ๋จ

ํ•ญ์ƒ ์ง€๊ธˆ ํƒ€์ž…์„ ์ฒดํฌํ•ด์ฃผ์ž

 

๐Ÿ›’ array์™€ object

array์™€ object์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์คŒ

let name :string[] = ['Yong', 'Bok']
let age :{ age : number } = { age : number }

 

array์—์„œ ์ž๋ฃŒ๋งˆ๋‹ค ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด

type Member = [number, boolean]
let john :Member = [100, false]

 

object๋„ ํƒ€์ž…์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง„๋‹ค๋ฉด → ๋นผ์ฃผ์ž

type MyObject = {
  name? : string,
  age : number
}
let Bok :MyObject = { 
  name : 'kim',
  age : 50
}
  • ์—ฌ๊ธฐ์„œ ๋ฌผ์Œํ‘œ๋Š” ๋ญ์ž„?
  • ์–ด๋–ค ์†์„ฑ์ด ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉด ?๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜ํƒ€๋ƒ„

๋งŒ์•ฝ, object์— ์–ด๋–ค ์†์„ฑ์ด ๋“ค์–ด๊ฐˆ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ํ•œ๋ฒˆ์— ์ง€์ • ๊ฐ€๋Šฅ

index signature

type MyObject = {
  [key :string] : number,
}
let ์ฒ ์ˆ˜ :MyObject = { 
  age : 50,
  weight : 100,
}

 

Class๋„ ๊ฐ€๋Šฅ

class Person {
  name;
  constructor(name :string){
    this.name = name;
  }
}

์ค‘๊ด„ํ˜ธ ๋‚ด์— ๋ฏธ๋ฆฌ name ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋†”์•ผ constructor ์•ˆ์—์„œ this.name ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ