2016-12-27 2 views
0

В этом коде, тип v1: BehaviorSubject<string | number>, а тип v2 - {}.Тип результата типа TypeScript по типу параметра

Я хочу, чтобы этот тип v1 был BehaviorSubject<string> и тип v2 be { 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 }); 

Возможно, это относится к новейшему TypeScript 2.1 с использованием функции keyof или отображаемых типов.

ответ

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 }>; 
} 

Используя ту же логику, где типы а, б и быть соответственно BehaviorSubject<number>, BehaviorSubject<string> and { x: number, y: number }.

Возможно ли это?

+0

Возможно, вы захотите опубликовать это как новый вопрос для видимости – Paarth

Смежные вопросы