2013-02-09 163 views
1

陣列簽名方法試圖讓這個編譯:如何實現打字稿

interface ListInterface { 
    getObject(index: number): Object; 
    [index: number]: Object; 
} 

class List123 implements ListInterface { 
    private list: Object[] = [1,2,3]; 
    getObject(index: number) { return this.list[index] } 
    [index: number] { return this.getObject(index) } 
} 

但TSC被髮射:

意外 '[' 在課堂上定義的[ ]方法聲明。

Typescript Playground Link(取消註釋//對我有問題?)

回答

5

某些類型的註釋是有定義的JavaScript行爲,不能實施 - 索引註釋就是這樣一個例子。請參閱related discussion on codeplex

對於問題中提供的代碼示例,有一個部分解決方案,因爲JavaScript對象自然支持索引器表示法。因此可以這樣寫:

interface ListInterface { 
    getObject(index: number): Object; 
} 

class List123 implements ListInterface { 

    getObject(index: number) { 
     return <Object> this[index] 
    } 
} 

var list = new List123(); 
list[1] = "my object"; 

console.log(list[1]); // "my object" 
console.log(list.getObject(1)); // "my object";