정의할 수 있는 타입
type과 interface는 공통적으로 객체 타입을 정의하거나 클래스에 특정 메서드나 프로퍼티를 가지도록 강제할 때 사용할 수 있다.
interface PersonA {
name: string
}
type PersonB = {
name: string
}
type은 모든 타입(원시 타입, 유니온 타입, 튜플 타입 등)을 정의할 때 사용할 수 있지만, interface는 객체 타입을 정의할 때 사용가능하다.
// ⭕️
type name = string;
// ❌
interface name = string;
확장 방법 (상속)
interface Person {
name: string
}
interface Player extends Person {
nickname: string
}
type Person = {
name: string
}
type Player = Person & {
nickname: string
}
interface는 클래스와 비슷하게 extends 키워드를 이용해 확장할 수 있고,
type은 & 연산자를 이용해 확장할 수 있다.
선언적 확장
interface Person {
name: string
}
interface Person {
address: string
}
interface Person {
age: number
}
const so: Person = {
name: "so",
address: "seoul",
age: 1
}
interface는 같은 이름으로 여러 개의 interface를 선언해주면, 타입스크립트가 자동으로 이를 하나로 합쳐준다.
type Person = {
name: string
}
// ❌ error
type Person = {
address: string
}
하지만 type 키워드로는 이것이 불가능하다.
type은 새 property를 추가하기 위해 다시 선언될 수 없지만 interface는 항상 상속이 가능하다.
따라서 객체 타입을 정의할 때는 객체의 확장성을 위해 interface를 사용하는 것을 추천한다고 한다.
'TypeScript' 카테고리의 다른 글
[TypeScript] 제네릭(Generics) 기본 (0) | 2023.10.03 |
---|---|
TypeScript의 타입 (0) | 2023.03.29 |
TypeScript 시작하기 (0) | 2023.03.29 |