2017-06-13 9 views
0

Arrayクラスに新しいメソッド(last)を追加しようとしています。グローバルメソッドに新しいメソッドを追加して配列クラスを拡張する

これは私のtest.tsファイルで、私は(宣言他の機能amoung)やっている:完全に今、私はエラーを取得Arrayための他の定義を消去するようだしかし、これは動作しません

declare global { 
    interface Array<T> { 
     last(): T; 
    } 
} 

if (!Array.prototype.last) { 
    Array.prototype.last = function <T>(): T { 
     return this[this.length - 1]; 
    } 
} 

以下のように:私は任意の配列のlengthプロパティにアクセスしようとした場合

TypeError: Cannot read property 'length' of undefined

これが起こります。

これを正しく達成するにはどうすればよいですか?宣言は単独でファイルに入れなければなりませんか?

+0

あなたはモジュールシステムを使用していますか?つまり、 'import' /' export'を使用していますか? –

+0

@NitzanTomerいいえ私は同じ宣言を私が使っているのと同じファイルに入れているだけです。IntelliJはエラーを表示しませんが、一度コンパイルするとエラーが発生します。 – smac89

+0

@NitzanTomer、実際にはいくつかのインポートがファイル。これは何か変わるでしょうか? – smac89

答えて

1

インポート/エクスポート時にグローバルモジュールを増やしてください。これはあなたのケースではありませんので

は、あなただけのこれを実行する必要があります。

ある
interface Array<T> { 
    last(): T; 
} 

は、declare global { ... }でそれをラップしないでください。

また、実際の実装では、ジェネリック医薬品のための必要はありません、それは/あるべきことができます。

if (!Array.prototype.last) { 
    Array.prototype.last = function(): any { 
     return this[this.length - 1]; 
    } 
} 
+1

迅速な応答ありがとう。 'last'プロパティはtype 'string []'に存在しません。 'last'プロパティは 'any []'タイプに存在しません – smac89

+0

エラーはどこにでもあります ' Array.prototype.last'と基本的には 'someArray.last()'を使っています。 – smac89

関連する問題