2016-07-11 36 views
0

我試圖用打字稿內置接口,ArrayLike失蹤,但還是有像以下錯誤信息:打字稿:指數的簽名與ArrayLike接口

Error:(12, 11) TS2420: Class 'Point' incorrectly implements interface 'ArrayLike'. Index signature is missing in type 'Point'.

interface ArrayLike<T> { 
    length: number; 
    [n: number]: T; 
} 

class Point implements ArrayLike<number> { 
    [0]: number = 10; 
    length: number = 1; 
} 

我怎樣才能解決這個問題? (或任何解決方法?)

回答

0

如何實現接口ArrayLike

class Point implements ArrayLike<number> { 
    [n: number]: number; 
    length: number = 1; 
    [0]: number = 10; 
} 

let p = new Point() 
p[23] = 34; // ok 
p[23] = "34"; // Error: Type 'string' is not assignable to type 'number' 
+0

現在我明白我錯過了什麼。謝謝! – Gloridea

0

如果你想你的Point是一個數組,那麼爲什麼不擴展Array類?

class Point extends Array<number> { 
    // add Point array methods here 
} 

這樣Point會自動實現ArrayLike<number>接口。

+0

據透露,http://stackoverflow.com/questions/26700164/extending-array-with-es6-classes#28224044 – Paleo

+0

@Paleo有趣的是,雖然我仍然在擴展'Array'類時沒有遇到任何問題。另外,你爲什麼要直接設置數組的長度?這沒什麼意義。 –

+0

此致,我不知道爲什麼要使用'ArrayLike '接口。我剛剛回答了這個問題。 :s – Paleo