Type Alias는 같은 타입을 한 번 이상 재사용하거나 또 다른 이름으로 부르고 싶은 경우에 사용합니다.
type Todolist = {
id: number,
content: string,
done: boolean,
}
function printTodolist(todo: Todolist) {
console.log(`id:${todo.id}\n내용:${todo.content}\n수행:${todo.done?'O':'X'}\n`)
}
const todolist: Todolist = {
id: 1,
content: '타입스크립트 공부',
done: true,
}
printTodolist({ id: 0, content: '타입스크립트 공부', done: false })
printTodolist(todolist)
인터페이스 선언은 object type을 만드는 또 다른 방법입니다.
interface Todolist {
id: number,
content: string,
done: boolean,
}
function printTodolist(todo: Todolist) {
console.log(`id:${todo.id}\n내용:${todo.content}\n수행:${todo.done?'O':'X'}\n`)
}
const todolist: Todolist = {
id: 1,
content: '타입스크립트 공부',
done: true,
}
printTodolist({ id: 0, content: '타입스크립트 공부', done: false })
printTodolist(todolist)
둘 다 변수, 함수 타입 정의가 가능합니다.
타입의 경우에는 이보다 더 간단하게 선언할 수도 있습니다.
둘 다 제네릭 사용이 가능합니다.
type alias
를 사용한 경우와 마찬가지로
printTodolist({ id: 0, content: '타입스크립트 공부', done: false })
구문을 보면 마치 타입이 없는 임의의 익명 객체를 사용하는 것처럼 동작합니다. typescript는 오직 printTodolist에 전달된 값의 구조만 신경씁니다. 즉 기대되는 property가 있는지만을 따집니다. 이렇게 타입이 가지는 구조와 능력에만 관심을 갖는점은 Typescript가 구조적 타입 시스템이라고 불리는 이유입니다.
Type Alias는 문자열과 유니온타입, 튜플등을 타입으로 지정할 수 있습니다.
type은 & interface는 extends를 이용해서 확장할 수 있습니다.
interface는 동일한 이름으로 interface를 정의해서 확장하는 것이 가능합니다.
🔥 type alias는 동일한 이름 선언이 불가능 🔥
🔥 타입스크립트 팀에서는 Interface와 Type Alias 중 선택하여 사용할 수 있다면 되도록 Interface를 사용하고 문제가 생기거나 튜플이나 유니온타입을 써야하는 경우라면 Type Alias를 사용하도록 권장하고 있습니다. 🔥
추상적인 메소드를 정의한다는 의미에서 둘은 공통점을 갖습니다.
추상클래스는 하나 이상의 추상 메소드를 포함하고 일반 메소드도 포함할 수 있습니다.
반면에 인터페이스는 추상 메소드로만 구성 돼 있고 일반 메소드를 포함할 수 없습니다.