2016-12-27 5 views
0

このコードでは、v1の型はBehaviorSubject<string | number>であり、種類はv2であり、{}です。TypeScript型の結果の型パラメータの型に基づく

この種類のv1BehaviorSubject<string>となり、タイプはv2となります。{ a: number, b: number }となります。

TypeScriptタイプのシステムでこれが可能ですか?

interface Test 
{ 
    prop: { 
     (x: string | number): BehaviorSubject<typeof x>; 
     (x: {}): typeof x; 
    } 
} 

let test: Test; 
let v1 = test.prop(''); 
let v2 = test.prop({ a: 1, b: 2 }); 

keyofまたはマップされたタイプの機能を使用していても、最新のTypeScript 2.1である可能性があります。

答えて

2

これにジェネリックを使用することはどうですか?

interface Test 
{ 
    prop: { 
     <T extends string | number> (x: T): BehaviorSubject<T>; 
     <T> (x: T): T; 
    } 
} 
0

解決策@Paarthが私の質問に答えました。私は使用していた:

<T extends string> (x: T): BehaviorSubject<string>; 
<T extends number> (x: T): BehaviorSubject<number>; 

だから、(1)小道具(2)と互換性のあるタイプ(代わりに定数の数を、)持って支えます。 、B、Cの種類は、それぞれBehaviorSubject<number>, BehaviorSubject<string> and { x: number, y: number }も同じロジックを使用して、

interface Int 
{ 
    a: MyType<number>; 
    b: MyType<string>; 
    c: MyType<{ x: number, y: number }>; 
} 

は今、私はこのような何かをしたいです。

これは可能ですか?

+0

これは、公開に関する新しい質問として投稿することができます – Paarth

関連する問題