Today I Learned_230207
- &를 쓰면 타입 상속과 같이 쓸 수 있다. ‘그리고’라는 개념보다는 상속이라고 받아들여보자.
//이렇게 하면 셋 다 만족시킬 수 있음 -> 어떻게 보면 상속에 해당
//타입 확장의 개념으로 쓸 수 있다.
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
안붙이는 방식도 있음 → 요새 트렌드는 위에꺼 안 붙이는게 트렌드임
왜 안붙이냐? → 커서를 올리면 이 타입이 무엇인지 보인다. 붙여서 얻는 의미가 크진 않음
요새는 제네릭에만 붙이고 실제 네이밍에는 잘 쓰지 않는다.
다른 언어 출신이라면 붙일 수는 있어도 자바스크립트 진영에서는 잘 안 붙이는 추세