2014-01-14 33 views
8

voidをTypeScriptの汎用関数の型パラメータとして指定することができます。関数の戻り値に対しては正常に動作します。しかし、voidが引数の型である場合、その値にどのような値を使用できるかははっきりしていません。 voidタイプの引数のパラメータを指定する方法はありますか?もしそうでなければ、そのような関数を宣言することはなぜ可能ですか?TypeScriptの汎用関数の引数の型としてのvoid

答えて

0

ボイドの値を取得するのは非常に簡単です。技術的にはまだundefined値ですが、活字体は、それは我々が必要なものを正確にvoid型のだと考えていますが:

var voidValue = (function() { })(); 
7

TypeScript specificationから:

注:彼らは有用な目的を果たしていないとして、私たちは、void型の変数の宣言を許可しないことを検討してください。しかし、Voidはジェネリック型または関数への型引数として許可されているため、Voidプロパティまたはパラメータを禁止することはできません。

4

voidを型引数として使用できますが、型として使用しないでください。実際に

、あなたは現在、型注釈にそれを使用することが可能かもしれないが、値を代入することは不可能である。

var x: void = ???; // cannot supply a value 

ボイドの使用type引数を以下に示すよう:

class Example<TReturn> { 
    process(func:() => TReturn) { 
     return func(); 
    } 
} 

このクラスのtype引数は、関数の戻り値の型を指定するために使用します。これは、その関数のタイプがvoidであることを指定したいということです。だから型引数として許されなければならない。

var example = new Example<void>(); 

今、私はexample.processへの呼び出しを記述する際に、自動補完が、私はニーズを渡す引数は次のタイプを満たすためにと私に教えてくれます:

func:() => void 

をそしてそれはまた、example.process自身と私に教えてくれますこの場合は無効ですです。

voidはタイプに注釈を付けるためのものではありませんが、タイプ引数として許可する妥当な理由があるため、現在チェックされていません。それはあなたが不正なものを作成することができることを意味しますが、ハード、それを使用するために押されるだろう:

class Example<T> { 
    process(func: T) { 
     // if T is void, this is all wrong 
    } 
} 

var example = new Example<void>(); 

この無効例では(すべてのエラーを表示しません)あなたはへの呼び出しを記述することはできません有効な引数を渡すことができなかったため、example.process

+1

ごめんなさい。質問に答えなかった部分を強調してくれますか? – Fenton

0

あなたはこのような何かを行うことができます。私は活字体を使用してい

class Example<T> { 
    process(func: T = undefined) { 
    // use default undefined parameter 
    } 
} 

var example = new Example<void>(); 

exmple.process(); 

を1.8.7それは私のためにうまくいった。

関連する問題