Ваш пример довольно близко, только проблема заключается в том, что T должен представлять, что он расширяет HTMLElement, а затем вы должны наложить HTMLElement на тип T (не уверен, почему) в стороне конструктора.
// cast T as type HTMLElement
class Elem<T extends HTMLElement> {
public element: T;
constructor(typeElement: string) {
// had to cast HTMLElement to type T....
// odd because T extends HTMLElement, but it works
this.element = <T>document.createElement(typeElement);
}
}
var e = new Elem('div');
e.element.innerHTML = 'generic class test';
document.body.appendChild(e.element);
Вы можете видеть, что это работает в playground
«я пытался сделать это» - то, что * это *? – m02ph3u5