Today I Learned_230207

1 분 소요

  • &를 쓰면 타입 상속과 같이 쓸 수 있다. ‘그리고’라는 개념보다는 상속이라고 받아들여보자.
//이렇게 하면 셋 다 만족시킬 수 있음 -> 어떻게 보면 상속에 해당
//타입 확장의 개념으로 쓸 수 있다.
type Animal = {breath: true};
type Mammal = Animal & {breed: true};
type Human = Mammal & {think: true};

const heejung: Human = {breath: true, breed:true, think:true};
//interface : extends가 있다. class extends하듯이 사용 가능
interface A{
    breath: true
}
interface B extends A{
    breed: true
}

const b : B = {breath:true, breed:true};

//타입과 인터페이스 혼용 가능
//interface가 type을 extends할 수도 있고 그 반대도 가능
interface C extends Human {
    test: true
}
  • interface와 type(&)간에는 차이가 있다. 하지만 큰 차이는 없는 듯. 기능적 차이가 실무에 큰 영향을 주지 않는다.
  • type : 간단하게 쓰고싶을 때. 막 욱여넣을 수가 있다.
  • interface는 객체지향적으로 짤 수 있음. typescript가 익숙하지 않은 사람들도 알 수 있다. 상속/확장이 명확해짐.
  • 많은 라이브러리들에서는 interface를 좀 더 많이 쓰는 추세이다.
  • 명확하게 구분되어 있진 않음. 표현 방식의 차이라고 보면 된다.

  • interface끼리는 서로 합쳐짐. 이렇게 중복해서 선언해도 큰일이 안 난다.
interface A { a: string } //선언 할 때마다 합쳐진다.
interface A { b: string }
const obj1: A = { a: 'hello', b: 'world' }

type B = { a: string }
type B = { b: string }
const obj2: B = { a: 'hello', b: 'world' }

interface C {
    talk:() => void;
}
interface C {
    eat:() => void;
}
interface C {
    sit:() => void;
}
const c: C = {talk() {}, eat() {}, sit() {}}
  • 인터페이스는 합쳐지므로 라이브러리 등에서 많이 사용한다.
  • 다른 사람의 라이브러리를 가져다 쓸 때 합쳐서 쓰기에 용이하기 때문

네이밍 룰

  • interface : I
  • type : T
  • enum : E

안붙이는 방식도 있음 → 요새 트렌드는 위에꺼 안 붙이는게 트렌드임

왜 안붙이냐? → 커서를 올리면 이 타입이 무엇인지 보인다. 붙여서 얻는 의미가 크진 않음

요새는 제네릭에만 붙이고 실제 네이밍에는 잘 쓰지 않는다.

다른 언어 출신이라면 붙일 수는 있어도 자바스크립트 진영에서는 잘 안 붙이는 추세

카테고리:

업데이트: