{
type PositionType = {
x: number;
y: number;
};
// type PositionType = { // error
// z: number;
// }
interface PositionInterface {
x: number;
y: number;
}
// 😆 only interfaces can be merged.
interface PositionInterface {
z: number;
}
...
}
예를들어 PositionInterface의 경우 두번에 걸쳐서 타입을 정의했는데, 이 경우 둘을 합쳐서
{
x: number;
y: number;
z: number;
}
반면 type의 경우 중복 정의가 불가능하다. (에러 발생)
{
...
// object ★
const obj1: PositionType = {
x: 1,
y: 1,
};
const obj2: PositionInterface = {
x: 1,
y: 1,
z: 1,
};
// class ★
class Pos1 implements PositionType {
x: number;
y: number;
}
class Pos2 implements PositionInterface {
x: number;
y: number;
z: number;
}
// Extends
type ZPositionType = PositionType & { z: number };
interface ZPositionInterface extends PositionInterface {
z: number;
}
...
}
extends의 경우, type은 intersection(&)을 통해 같은 효과를 구현한다.{
...
// 😆 Type aliases can use computed properties
// (e.g. Mapped, Utility, Index types)
type Person = {
name: string;
age: number;
};
type Name = Person['name']; // string
// others..
type NumberType = number;
type Direction = 'left' | 'right';
}