πŸ“˜ TypeScript/κ°œλ…

[μ½”λ”©μ• ν”Œ] νƒ€μž…μŠ€ν¬λ¦½νŠΈ νƒ€μž… 지정 방법

Zoeeey 2023. 12. 7. 12:21

λ³€μˆ˜ νƒ€μž… μ§€μ •ν•˜κΈ°

일반 νƒ€μž… 지정

let 이름 :string = 'kim' //string, number, boolean, bigint, null, undefined,[], {}

μ—¬λŸ¬κ°€μ§€ νƒ€μž… 지정

let 이름 :string | number = 'kim';

object νƒ€μž… 지정

let λ‚˜μ΄ :{ age : number } = { age : number }

ν•œκΊΌλ²ˆμ— νƒ€μž… μ§€μ •ν•˜κΈ°

type MyObject = {
  [key :string] : number,
}
let 철수 :MyObject = { 
  age : 50,
  weight : 100,
}

μ–΄λ–€ 속성이 λ“€μ–΄κ°ˆμ§€ λͺ¨λ₯Ό λ•Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.


array νƒ€μž… 지정

let 이름 :string[] = ['kim', 'park']
let λ‚˜μ΄ :{ age : number } = { age : number }

generic : array 자료 νƒ€μž… 지정

let 이름 :Array<string> = ['kim', 'park']

tuple : array 자료 (μˆœμ„œ 포함) νƒ€μž…  지정

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

μ—¬λŸ¬κ°€μ§€ νƒ€μž…μ„ ν•¨κ»˜ κ°€μ§ˆ 수 μžˆλŠ” 배열이닀. μš”μ†Œμ˜ νƒ€μž…κ³Ό κ°œμˆ˜κ°€ κ³ μ •λœ 배열을 생성할 수 μžˆλ‹€. tuple은 그닀지 ꢌμž₯λ˜μ§€ μ•ŠλŠ”λ‹€.


ν•¨μˆ˜ νŒŒλΌλ―Έν„°, 리턴 νƒ€μž… 지정

function ν•¨μˆ˜λͺ…(x :number) :number{
  return x * 2
}

ν•¨μˆ˜λŠ” return νƒ€μž…μœΌλ‘œ voidλ₯Ό μ„€μ •ν•  수 μžˆλ‹€. μ΄λŠ” return이 μ—†λŠ”μ§€ 체크할 수 μžˆλŠ” νƒ€μž…μ΄λ‹€.


class νƒ€μž… 지정

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

였λ₯˜κ°€ λ‚˜λŠ” 경우

λ³€μˆ˜ νƒ€μž…μ΄ ν™•μ‹€ν•˜μ§€ μ•Šμ„ λ•Œ μ—°μ‚° μ‹€ν–‰

//μ—λŸ¬
function ν•¨μˆ˜λͺ…(x :number | string) {
  return x * 2
}

//κ°€λŠ₯
function ν•¨μˆ˜λͺ…(x :number | string) {
  if (typeof x === 'number'){
    return x * 2
  } 
}

νƒ€μž…μ΄ 무엇인지 μ²΄ν¬ν•˜λŠ” narrowing λ˜λŠ” assertion 문법을 μ‚¬μš©ν•΄μ•Ό μ—°μ‚°ν•  수 μžˆλ‹€. μœ„λŠ” narrowing 문법.

assertion 문법

//μ—λŸ¬
function ν•¨μˆ˜λͺ…(x :number | string) {
  return x * 2
}

//κ°€λŠ₯
function ν•¨μˆ˜λͺ…(x :number | string) {
  let array :number[] = [];
  array[0] = x as number; //assertion
}

assertion 문법은 λ‚¨λ°œν•˜μ§€ 말고 μš©λ„λ₯Ό 잘 νŒŒμ•…ν•˜μž.

1. Narrowing ν•  λ•Œ μ“΄λ‹€. μœ„μ²˜λŸΌ μœ λ‹ˆμ˜¨νƒ€μž…μ΄ μžˆμ„ λ•Œ narrowingν•˜λŠ” μš©λ„λ‘œ 쓰지 μ•Šκ³  string으둜 λ˜μ–΄μžˆλŠ”κ±Έ number둜 λ°”κΎΈλŠ” 게 μ•„λ‹ˆλ‹€.
2. 무슨 νƒ€μž…μ΄ λ“€μ–΄μ˜¬μ§€ 100% ν™•μ‹€ν•  λ•Œ μ“΄λ‹€.
3. λΉ„μƒμš©μ΄λ‚˜ λ””λ²„κΉ…μš©μœΌλ‘œ μ“°κ³  κ·Έλƒ₯ 쓰지 말자.


팁

νŠΉμ • 속성이 선택사항이면 λ¬ΌμŒν‘œλ₯Ό κΈ°μž…ν•œλ‹€.

function ν•¨μˆ˜λͺ…(x? :number) {
  return x * 2
}

//*** λ¬ΌμŒν‘œλŠ” undefinedλ₯Ό μΆ”κ°€ν•΄ union νƒ€μž…μœΌλ‘œ λ‘λŠ” 것과 λ™μΌν•˜λ‹€.
function ν•¨μˆ˜λͺ…(x :number | undefined) {
  return x * 2
}

(μ€‘μš”) λ¬ΌμŒν‘œλ₯Ό κΈ°μž…ν•˜λ©΄ undefinedλ₯Ό μΆ”κ°€ν•΄ unionνƒ€μž…μœΌλ‘œ λ‘λŠ” 것과 λ™μΌν•˜λ‹€.

literal type : μ›ν•˜λŠ” νƒ€μž…μ„ λ§Œλ“€ 수 μžˆλ‹€.

type NameType = 'kim' | 'park;
let 이름 :NameType = 'kim';

좜처 : μ½”λ”©μ• ν”Œ https://codingapple.com/ / TypeScript Documentation https://www.typescriptlang.org/docs/handbook/2/objects.html