Смешивание параметра типа в тип экземпляра класса

1

typescript,class,

машинопись, класс,

Ответов: 0


0

Я перепутал это в течение нескольких минут и не смог найти способ определить класс, тип экземпляра которого включает переменную типа, которую вы хотите; см. комментарий по этой причине. Обратите внимание, что несмотря на то, что проблема отмечена как фиксированная, и ее заголовок, похоже, описывает то, что вы хотите, AFAICT название на самом деле ссылается на функцию базового конструктора, являющуюся параметром типа (это то, что позволяют классы mixin), а не тип экземпляра, включая параметр типа ,

Самое близкое, что я пришел, - это записать Aкласс нетипизированным, а затем передать его в универсальную конструкторскую функцию, чтобы вы могли расширить ее любым конкретным типом, указанным для A:

interface BaseAttributes {
    id: string;
}

class OneUntyped {
  constructor(attr: {}) { 
    Object.assign(this, attr);
  }
}
const One = OneUntyped as {new<A extends BaseAttributes>(attr: A): OneUntyped & A};

interface TwoAttributes extends BaseAttributes{
    label: string;
}

class Two extends One<TwoAttributes> {
}

let two: Two;
console.log(two.label);

// Error: Base constructor return type 'OneUntyped & A' is not a class or interface type.
class Three<A extends BaseAttributes> extends One<A> { }
машинопись, класс,
Похожие вопросы