TypeScript의 제네릭 클래스

TypeScript에서는 제네릭 인터페이스뿐만 아니라 제네릭 클래스도 만들 수 있습니다.

제네릭 타입의 클래스 User를 생성해 보겠습니다. 제네릭 타입의 속성 value도 작성하고 해당 생성자를 만들어 보겠습니다:

typescriptclass User <T> {
  value: T;
  constructor(userData: T) {
    this.value = userData;
  }
}

이제 이 클래스의 객체를 만들고 속성에 문자열 값을 지정해 보겠습니다:

typescriptlet user = new User('john');
console.log(user.value); // 'john'

그러나, 객체를 호출할 때 이미 문자열 값을 지정했다면, 이 값을 다른 타입으로 다시 할당하는 것은 불가능합니다:

typescriptlet user = new User('john');
user.value = 35;

코드를 실행하려고 하면 다음과 같은 오류를 보게 됩니다:

typescriptType 'number' is not assignable to type 'string'.

하지만 동시에 문자열 값은 재할당할 수 있습니다:

typescriptlet user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'

동일한 객체의 속성을 다른 타입으로 재할당하는 것은 할 수 없지만, 단순히 다른 객체를 생성할 수는 있습니다:

typescriptlet newUser = new User(35);
console.log(newUser.value); // 35