2016-12-27 76 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