2015-09-03 64 views
0

我想這樣做,但this.element不能分配給我不明白爲什麼打字稿泛型類型HTML元素包裹

class Elem<T> { 
    public element : T; 
    constructor(typeElement:string){ 
     this.element = document.createElement(typeElement); 
    } 
} 

,你可以看到playground

+0

工作「我想這樣做」 - 什麼是*是*? – m02ph3u5

回答

1

你舉的例子是非常接近時,唯一的問題是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

+0

我相信這不會一路走來。 'e.element'是一個基本的'HTMLElement',除非你指定'new Elem (「div」)'。但這意味着可以編寫'新的Elem (「body」)'或任何其他錯誤的組合。編譯器不會爭辯。試着設置一個不屬於基本'HTMLElement'的屬性(例如'align'),它不會被編譯。 – adaskos