2016-08-28 9 views
0

私はtypescriptを試していますが、基本的にはIIFEですが最後の引数ではなく最初の引数を持つusing(...)関数を作成しようとしています。TypeScriptで関数の暗黙の型指定を取得する方法は?

var someValue = (function (p0, p1) { 
    // p0 is someGlobal 
    // p1 is someOtherGlobal 

    // do stuff with in scope 

    return /*something*/; 
}(someGlobal, someOtherGlobal)); 

上記は戻り値を持つ一般的なIIFEです。繰り返しますが、私はここで実験していますが、IIFEの議論が最初に来たら関数がより読みやすくなると思います。

const someValue = using([someGlobal, someOtherGlobal], /*as*/ (p0, p1) => { 
    // p0 is someGlobal p1 is someOtherGlobal 
    // do stuff 
    return /*something*/; 
}); 

そしてこのusing(...)機能が書くのは難しいように思えませんが、今、私はVSのコード内でインテリセンスのために、この関数を入力してトラブルを抱えています。

これは私がこれまでに作ってみたものです:正しくこの関数

function using<A, B, C, D, E, F>(
    params: A | [A, B] | [A, B, C] | [A, B, C, D] | [A, B, C, D, E, F], 
    func: (p0: A, p1: B, p2: C, p3: D, p4: E, p5: F) => any 
) { 
    return func(
     params[0], 
     params[1], 
     params[2], 
     params[3], 
     params[4], 
     params[5] 
    ); 
} 

funcのパラメータの種類が、何それはしませんと、戻り値を入力しています。したがって、この例では:

const someValue = 42; 
const someNum = using(someValue, num => num + 1); 

numは正しくnumberとして入力されますがsomeNumanyに型付けされます。

func=> anyの返品タイプを入力したと思われるかもしれません。

ので、ここで質問です:

私はsomeNumの種類を知るために、コード対を取得するにはどうすればよいですか?

typescript playground

答えて

1

私はその後、彼は御馳走のためにあります将来的に誰もがこのコードを読んで理解する必要があります場合は、このコードは私の意見では非常に直感的であるということから始めたいと思います。

あなたが求めていることに対する解決策は非常に簡単ですが、答えがちょうどであるので、これらのジェネリックのすべてでそれを見るのは難しいです:関数の戻り値の型:

function using<A, B, C, D, E, F, Return>(
    params: A | [A, B] | [A, B, C] | [A, B, C, D] | [A, B, C, D, E, F], 
    func: (p0: A, p1: B, p2: C, p3: D, p4: E, p5: F) => Return 
): Return { 
    return func(
     params[0], 
     params[1], 
     params[2], 
     params[3], 
     params[4], 
     params[5] 
    ); 
} 

const someNumber = 42; 
const someString = 'whoo'; 
const someValue = using([someNumber, someString], (num, str) => { 
    return num + str.length; 
}); 

code in playground

someValueのタイプnumberあります。

+0

この回答に感謝します。そして、私はこのようなものを生産に期待していません。実験するのは単なる楽しいことです –

関連する問題