2016-12-27 3 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). A, B의 종류와 각각 BehaviorSubject<number>, BehaviorSubject<string> and { x: number, y: number } 수 c는 같은 논리를 사용

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

:

는 지금은 이런 일을 할 수 있습니다.

이것이 가능합니까?

+0

공개 설정을 위해 새로운 질문으로 게시하고 싶을 수 있습니다. – Paarth