πŸ“’[TypeScript λ§ˆμŠ€ν„° with Webpack & React] Step07.μΈν„°νŽ˜μ΄μŠ€

κΆŒμš©μ€€Β·2023λ…„ 12μ›” 6일
0
post-thumbnail

5. μΈν„°νŽ˜μ΄μŠ€ vs νƒ€μž…λ³„μΉ­

λŒ€λΆ€λΆ„μ˜ μž‘μ—…μ˜ 경우 이 λ‘˜μ˜ 역할은 λ™μΌν•˜μ§€λ§Œ 핡심적인 차이가 μžˆλ‹€.

  1. μΈν„°νŽ˜μ΄μŠ€λŠ” 였직 객체 ν˜•νƒœλ§Œ λ¬˜μ‚¬ν•  수 μžˆλ‹€. νƒ€μž… 별칭은 λͺ¨λ“  νƒ€μž…μ„ λ¬˜μ‚¬ ν•  수 μžˆλ‹€.
    즉, λͺ¨λ“  μ’…λ₯˜μ˜ νƒ€μž… 별칭을 μΈν„°νŽ˜μ΄μŠ€λ‘œ λŒ€μ²΄ν•  μˆ˜λŠ” μ—†μœΌλ―€λ‘œ
    객체의 ν˜•νƒœλ₯Ό λ¬˜μ‚¬ν•˜λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ νƒ€μž… 별칭을 μ‚¬μš©ν•΄μ•Όλ§Œ ν•œλ‹€.

  2. μΈν„°νŽ˜μ΄μŠ€λŠ” 이미 μƒμ„±λ˜μ—ˆμ–΄λ„ μΆ”κ°€ν•  수 μžˆλ‹€.
    μΈν„°νŽ˜μ΄μŠ€κ°€ κ°œλ³„ μ‚¬μš© 사둀에 적용될 수 있고, 전체 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€μ‹œ μž‘μ„±ν•΄μ•Ό ν•  ν•„μš”κ°€ μ—†λ‹€.

  3. μΈν„°νŽ˜μ΄μŠ€λŠ” 상속이 κ°€λŠ₯ν•˜λ‹€.

객체 νƒ€μž…μ„ λ¬˜μ‚¬ν•  λ•ŒλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λŠ”κ²Œ μœ μš©ν•˜λ‹€.

(κ°•μ˜μ— μ € μ€‘μš”ν•œ μš”μ μ΄λΌ μ˜¬λ €λ‘μ—ˆλ‹€.)

1. μΈν„°νŽ˜μ΄μŠ€ κ°œμš”

νƒ€μž… 별칭과 μΈν„°νŽ˜μ΄μŠ€λŠ” μœ μ‚¬ν•˜λ‹€.

였직 객체의 ν˜•νƒœλ₯Ό λ¬˜μ‚¬ν•˜λŠ” 데에 μ‚¬μš©λœλ‹€.

interface Point {
  x: number,
  y: number
}

const pt: Point = {x: 123, y: 1234};

2. readonly와 선택적 μΈν„°νŽ˜μ΄μŠ€

readonly인 ν”„λ‘œνΌν‹°λŠ” λ³€κ²½ν•  수 μ—†λ‹€.


interface Person{
  readonly id : number;
  first : string;
  last : string;
  nickname?; string;
}

let paul: Person = { id : 23 , first : "kwon" , last : "paul };

paul.id = 213 ; // error

3. Interface λ©”μ„œλ“œ

interface Person{
  readonly id : number;
  first : string;
  last : string;
  nickname?; string;
  sayHi: () => string; // string을 λ¦¬ν„΄ν•˜λŠ” λ©”μ„œλ“œ 
  //sayHi(): string;  // string을 λ¦¬ν„΄ν•˜λŠ” λ©”μ„œλ“œ
  say(hi:string): string; 
}

let paul: Person = { id : 23 , first : "kwon" , last : "paul , 
  sayHi: ()=>{
    return "Hello";
  },
  say(hello:string){
    return hello;
  }
  
  console.log(paul.say("nice to meet u"));
};

4. μΈν„°νŽ˜μ΄μŠ€ ν™•μž₯

  1. 타 μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„°μ˜ 상속할 수 있으며 닀쀑 상속도 κ°€λŠ₯ν•˜λ‹€.
  2. 이미 μƒμ„±λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€μ‹œ μΆ”κ°€ν•  수 μžˆλ‹€.


interface Dog { // 1. 이미 μƒμ„±λ˜μ—ˆμ§€λ§Œ
  name: string;
}

interface Dog { // 2. μΆ”κ°€ν•  수 μžˆλ‹€.
  age: number;
}

interface info{
  height: number,
  weight: number
}

interface ServiceDog extends Dog{ // 단일 상속
  job: "drug"|"bomb"|"guide dog"
}

interface DogInfo extends Dog,info // 닀쀑 상속 

const chewy: ServiceDog = {
  name : "Chewy",
  age : 3,
  job : "drug"
}
profile
Brendan Eich, Jordan Walke, Evan You, κΆŒμš©μ€€

0개의 λŒ“κΈ€