2017-07-01 5 views
0

TypeScriptの型の機能を拡張しようとしていますが、実際の型であればOKですが、インターフェイスの関数を宣言しようとすると同じ方法で他の型で実装されていると、コンパイラエラーが発生します。TypeScriptに入力する関数を追加する

interface Set<T> { 
    min(): T; 
} 

Set.prototype.min = function() { 
    return 0; 
} 

をしかし、この1つはない:ここで

は作品例です

ここ
interface IterableIterator<T> { 
    min(): T; 
} 

IterableIterator.prototype.min = function() { 
    return 0; 
} 

私が実装error TS2693: 'IterableIterator' only refers to a type, but is being used as a value here.上のコンパイラエラーを取得します。

IterableIteratorを実装しているすべてのインターフェイスに適用される/利用可能な関数を定義して実装する正しい方法は何ですか?

+1

セットは、インターフェイスではなくes6の 'set'を指します。コンパイラのエラーと同様に、型を変数として使用しています。 –

+0

@ShanevandenBogaard私はそれほど推測しましたが、インターフェイスのすべての実装で定義されるTypescriptで関数を作成するにはどうすればよいですか? –

+1

インターフェイスはjavascriptのものではなく、コンパイルされるとソースから削除されます。定義されたメソッドや属性を格納するための値を提供するだけです。これはインターフェイスをどのように扱うべきかではありません。ただし、抽象クラスを作成してそこにメソッドを実装することも、プロトタイプを使用することもできます。それが事前定義された実装を変数に適用する唯一の方法です。 –

答えて

0

TypeScriptはJava Scriptに変換されます。 JavaScript有効オブジェクトのみを拡張できます。 IterableIteratorは、拡張可能な有効なオブジェクトではない特殊な機能です。あなたはStringをJavaScriptコンソールに書いてみることができます。それは何らかのテキスト(つまり文字列を拡張することができます)を応答しますが、IterableIteratorと入力すると何らかのエラーが返されます。

関連する問題