타입스크립트는 클래스나 메서드에 final 키워드를 지원하지 않지만
클래스에서 final 효과를 구현할 수 있다
final 키워드는 클래스나 메서드를 확장, 오버라이드 할 수 없도록 막는 것
타입스크립트에서는 비공개 생성자(private constructor) 로 만들 수 있다
class MessageQueue {
private constructor (private messages: string[]) {}
}
생성자를 private 로 선언하면 new 키워드로 인스턴스를 생성하거나
클래스를 확장할 수 없게 된다
클래스 상속만 막아야하는데 인스턴스 생성도 함께 막혔다
다음과 같이 하면 쉽게 해결할 수 있다
class MessageQueue {
private constructor (private messages: string[]) {}
static create(messages: string[]) {
return new MessageQueue(messages)
}
}
위와 같이 하면 컴파일 타임에 확장을 막을 수 있다
class Queue extends MessageQueue {} // error
MessageQueue.create([]) // MessageQueue