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

[μ½”λ”©μ• ν”Œ] νƒ€μž…μ„ λ³€μˆ˜μ— λ‹΄μž : type alias

Zoeeey 2023. 12. 11. 12:30

type alias

νƒ€μž…μ„ λ³€μˆ˜μ— 담을 수 μžˆλ‹€. type aliasλŠ” μ˜λ¬Έ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” κ·œμΉ™μ΄ μžˆλ‹€.

type Name = string | number;
let 이름 :Name = 'kim';
type MyObject = {
  name? : string,
  age : number
}
let 철수 :MyObject = { 
  name : 'kim',
  age : 50
}

Object λ³€κ²½ μ—λŸ¬λ„μš°κΈ°

type MyObject = {
  readonly name : string,
}
let 철수 :MyObject = { 
  name : 'kim',
}
철수.name = 'Park'; // μ—λŸ¬

constλŠ” λ³€μˆ˜ μž¬ν• λ‹Ήμ΄ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ, object의 λ‚΄λΆ€ 속성은 λ³€κ²½ν•  수 μžˆλ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 이것에 μ—λŸ¬λ₯Ό λ„μšΈ 수 μžˆλ‹€.
*** μ€‘μš”ν•œ  사싀 : JS둜 컴파일 될 λ•Œ μ•„μ˜ˆ 변경을 λ§‰λŠ” 것은 μ•„λ‹ˆκ³ , κ·Έλƒ₯ μ—λŸ¬λ§Œ λ„μš°λŠ” 것. νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ—λŸ¬λŠ” 에디터와 ν„°λ―Έλ„μ—μ„œλ§Œ μ‘΄μž¬ν•œλ‹€.


type alias extend

type Name = string;
type Age = number;
type Person = Name | Age;

μœ„μ²˜λŸΌ νƒ€μž… λ‘κ°œλ₯Ό 합쳐 νƒ€μž… ν•˜λ‚˜λ‘œ λ§Œλ“œλŠ” 것도 λ¬Όλ‘  κ°€λŠ₯ν•˜λ‹€.

&μ—°μ‚°μžλ‘œ object νƒ€μž… extend (ν•©μΉ˜κΈ°)

type PositionX = { x : number };
type PositionY = { y : number };

type NewType = PositionX & PositionY;

let position :NewType = { x : 10, y : 20 };

** μ£Όμ˜μ‚¬ν•­ : 같은 μ΄λ¦„μ˜ typeλ³€μˆ˜λŠ” μž¬μ •μ˜κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.


type λŒ€μ‹  interface

type ν‚€μ›Œλ“œ λŒ€μ‹  interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.
보톡은 ꡬ쑰λ₯Ό ν™•μž₯ν•΄μ•Ό ν•  λ•Œ interfaceλ₯Ό, μœ λ‹ˆμ–Έμ΄λ‚˜ ꡐ차 νƒ€μž…μ„ μ‚¬μš©ν•˜κ±°λ‚˜ νƒ€μž…μ„ μ‘°μž‘ν•΄μ•Ό ν•  λ•Œ type을 μ‚¬μš©ν•˜λŠ” 것이 일반적인 κ΄€λ‘€λ‹€.

interface PositionX {
  x: number;
}
interface PositionY {
  y: number;
}

type NewType = PositionX & PositionY;

let position: NewType = { x: 10, y: 20 };

** μ£Όμ˜μ‚¬ν•­ : 같은 μ΄λ¦„μ˜ typeλ³€μˆ˜λŠ” μž¬μ •μ˜κ°€ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ interfaceλŠ” μ„ μ–Έλœ 후에도 ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€. λ‹€λ₯Έ κ³³μ—μ„œ 같은 μ΄λ¦„μ˜ interfaceλ₯Ό μ„ μ–Έν•˜λ©΄ 이전 μ„ μ–Έκ³Ό λ³‘ν•©λœλ‹€.

& λŒ€μ‹  implements둜 ν•©μΉ˜κΈ°

ν΄λž˜μŠ€λ‚˜ 객체가 interfaceλ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
TypeScriptμ—μ„œ implements ν‚€μ›Œλ“œλŠ” 주둜 ν΄λž˜μŠ€κ°€ νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€. implementsλŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 관계λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” ν‚€μ›Œλ“œμ΄λ―€λ‘œ, 일반적으둜 var, let, const λ“±μ˜ λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨κ»˜ μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.

interface Car {
  start(): void;
  stop(): void;
}

class ElectricCar implements Car {
  start() {
    console.log("Electric car is starting...");
  }

  stop() {
    console.log("Electric car is stopping...");
  }

  chargeBattery() {
    console.log("Charging the battery...");
  }
}

const myElectricCar = new ElectricCar();

myElectricCar.start();
myElectricCar.stop();
myElectricCar.chargeBattery();​

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