Typescript에서 정적 클래스 만들기

기본적으로 staticTypescript 클래스를 포함할 수 없지만 인스턴스화할 수 없는 클래스를 만드는 방법에는 여러 가지가 있습니다. 이 문서는 그들에 관한 것입니다.

1. 생성자를 비공개로 설정




class JustAClass {
  private constructor() { }
}


인스턴스화하려고 하면 Intellisense가 경고합니다.

2. 클래스 생성자에서 오류 발생




class Static {
  constructor() {
    throw new Error('No, you don\'t!');
  }
}


생성자 내부에 오류를 던지면 작업이 완료되고, 이제 다른 클래스가 이 클래스를 상속하여 스스로 정적이 될 수 있습니다.

class JustAClass extends Static {
  constructor() { super(); }
}


첫 번째 방법과 달리 도움이 되는 인텔리센스는 없지만.

3. 대신 초록 사용




abstract class JustAClass {}


Intellisense는 abstract 키워드를 오용한 것처럼 보이지만 인스턴스화하려고 할 때 여전히 경고를 표시합니다.

4. 모든 클래스를 정적으로 만드는 데코레이터 만들기



이 접근 방식은 방법 2와 TypeScript의 데코레이터 기능을 결합합니다. 우리는 주어진 클래스를 상속하는 익명 클래스를 펌핑하고 생성자 호출을 오류 발생으로 재정의하는 함수를 만듭니다. 그리고 예, 그것은 모든 규칙을 위반하고 나쁜 boi처럼 슈퍼를 호출하지 않으므로 @ts-ignore 로 컴파일러를 침묵시킵니다.

function Static<T extends new (...args: any[]) => any>(ctr: T): T {
  return class extends ctr {
    // @ts-ignore
    constructor(...args: any[]) {
      throw new Error('no way dude');
    }
  }
}

@Static
class JustAClass {}


인텔리센스의 안전성을 제공하지는 않지만 이 접근 방식은 상당히 선언적입니다.

이렇게 4가지 방법을 알아봤습니다 :)

좋은 웹페이지 즐겨찾기