2017-12-27 27 views
0

유형이 C1[]이거나 C2<C1>[] 일 수있는 변수가 있습니까? 변수에 대한 유형 가드를 만들려면 어떻게해야합니까?타이프 스크립트 제네릭 유형 가드

interface C<T>{ 
    key: string; 
    secret: T; 
} 

private isC(d: Foo[] | C<Foo>): d is C<Foo>[] { 
    return (<C<Foo>>)d[0].key !== undefined 
} 

isC은 컴파일되지 않습니다.

답변

1

여기에 여러 문제가 있습니다

  1. isC 함수는 입력 매개 변수로 Foo이 필요합니다. 이것은 다음과 같이 선언 할 필요가 의미

    private isC<Foo>(... 
    
  2. isC의 반환 유형 정의가 입력 매개 변수와 일치하지 않습니다. 반환 유형은 d의 매개 변수가 C<Foo>[] 일 때 isCtrue을 반환하지만 입력 유형이 Foo[] 또는 C<Foo> (둘 중 어느 것도 C<Foo>[])으로 제한되는 경우 반환 유형을 선언합니다.

    이 선언은 작동합니다 :

    private isC<Foo>(d: Foo[] | C<Foo>[]): d is C<Foo>[] { ... 
    
  3. (<C<Foo>>)d[0]는 유효한 타입 캐스트가 아닙니다. 대신,이 시도 :

    return (d as C<Foo>[])[0].key !== undefined 
    

또한이 playground with compiling example를 참조하십시오.

0
private isC(d: Foo[] | C<Foo>): d is C<Foo>[] { 
    return (d as C<Foo>[])[0].key !== undefined 
}