2017-12-14 19 views
0

入力オブジェクトに応じて正しい型を返す型付きPromise.props(...)ユーティリティ関数を作成したいと考えています。TypescriptでPromise.props(...)にジェネリック型を追加

static async props<T extends {[key: string]: Promise<S>|S}, S, U extends { [key in keyof T]: S}>(obj: T): Promise<U> { 
    const promises = []; 
    const keys = Object.keys(obj); 
    for (let i = 0; i < keys.length; i++) { 
     const key = keys[i]; 
     promises.push(obj[key]); 
    } 
    const results = await Promise.all(promises); 

    return results.reduce((map, current, index) => { 
     map[keys[index]] = current; 
     return map; 
    }, {}); 
} 

これまで入力パラメータであるTがありました。また、同じキーを持ちますが、異なる値の型を持つUを定義しました。

プロミスから結果の型を取得することは可能ですか?入力パラメータのキーを取得するのと同じ方法で取得できますか?

const result = await this.props({ 
    val1: Promise.resolve('test'), 
    val2: Promise.resolve(123), 
    val3: ['a', 'b', 'c'] 
}); 

IDEはその後、知っておくべきこと:私は、これは動作するはずだと思う

result.val1 is a string 
result.val2 is a number 
result.val3 is an array 

答えて

1

:私は持っていた

static async props<T>(obj: {[K in keyof T]: Promise<T[K]> | T[K]}): Promise<T> { 
    // (I didn't look at the implementation) 
} 
+0

、このようになっているはずの機能を使用して

コンパイラを幸せにするために '' 'obj [key]' ''を '' '' obj [key as any] ''に変更してください。それとは別に、それは働いている –

関連する問題