구성 시그니처는 클래스의 생성자에 대한 함수 타입을 정의합니다. 예제 코드를 보면 …
임의의 클래스에 대한 생성자의 구성 시그니처를 정의합니다.
interface PersonConstructor {
new (name: string): Person;
}
상기 구성 시그니처는 Person 클래스의 객체를 생성하는 생성자 함수의 타입이며 생성자는 name이라는 문자열 타입을 받습니다. 이제 이 구성 시그니처를 통해 생성될 객체의 클래스를 정의합니다.
class Person {
constructor(public name: string) {}
}
이제 앞서 정의한 구성 시그니처를 통해 Person 클래스의 객체를 생성하는 함수를 정의합니다.
function createPerson(
ctor: PersonConstructor,
name: string
): Person {
return new ctor(name);
}
사용 코드는 다음과 같습니다.
const person = createPerson(Person, "Alice"); console.log(person.name); // Alice
구성 시그니처는 제니릭으로 많이 작성되는데.. 예는 다음과 같습니다.
class Person {
constructor(public name: string) {}
}
class Student {
constructor(public name: string) {}
}
function createInstance<T>(
ctor: new (name: string) => T,
name: string
): T {
return new ctor(name);
}
const p = createInstance(Person, "Alice");
const s = createInstance(Student, "Bob");
console.log(p); // Person
console.log(s); // Student
