在此代码中,v1
的类型为BehaviorSubject<string | number>
,v2
的类型为{}
。
我希望v1
类型为BehaviorSubject<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。
答案 0 :(得分:2)
如何使用泛型?
interface Test
{
prop: {
<T extends string | number> (x: T): BehaviorSubject<T>;
<T> (x: T): T;
}
}
答案 1 :(得分:0)
@Paarth的解决方案回答了我的问题。我只需要使用:
<T extends string> (x: T): BehaviorSubject<string>;
<T extends number> (x: T): BehaviorSubject<number>;
因此prop(1)与prop(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 }
。
这可能吗?