2016-07-11 6 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実装する方法:Iしかしまだ、

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