2016-12-27 75 views
0

在此代碼中,類型v1BehaviorSubject<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)。

現在,我想是這樣的:

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

使用相同的邏輯,其中類型的a,b和c是分別BehaviorSubject<number>, BehaviorSubject<string> and { x: number, y: number }

這可能嗎?

+0

您可能想要將其作爲新的可見度問題發佈 – Paarth