Скажем, у меня есть:
class Person {
constructor(public name: string) {}
}
type Constructor<T> = new(...args: any[]) => T;
function Tagged<T extends Constructor<{}>>(Base: T) {
return class extends Base {
_tag: string;
constructor(...args: any[]) {
super(...args);
this._tag = "";
}
}
}
Я хочу иметь функцию, которая принимает экземпляры класса, созданного Tagged, в качестве параметра.Например:
function printTag(taggedObj: Tagged(Person)) {
console.log(taggedObj._tag);
}
Как правильно набрать это, сейчас это дает мне ошибку компиляции?Нужно ли создавать другой класс?Как:
class TaggedPoint extends Tagged(Person) {}
Следующий вопрос: если я создам
function printTag(taggedObj: TaggedPoint) {
console.log(taggedObj._tag);
}
А затем в другом месте у меня будет
class OtherTaggedPoint extends Tagged(Person) {
constructor(tag) {
super(‘some string’);
}
}
printTag(new OtherTaggedPoint());
Будетэто вызывает ошибку компиляции, потому что TaggedPoint
не совпадает с OtherTaggedPoint
?