2016-08-31 2 views
1

내가 매개 변수 문자열과 같이 정의 된 경우 확인하는 기능을 말해봐 경우 확인하는 기능을 정의하는 방법 : 이제매개 변수가 타이프에서 문자열 2.0

function isString(value: any): boolean { 
    return typeof value === 'string' || value instanceof String; 
} 

내가 타이프 2.0이 기능을 사용

function foo(param: string|Foo) { 
    if(isString(param)) { 
     // param is not narrowed to string here 
    } else { 
     // param is not narrowed to Foo here 
    } 
} 

문이 제대로 PARAM의 종류를 좁힐 경우의 예를 만들 것 내가 isString을 정의 할 수있는 다른 방법이 있나요 : 제어 흐름 분석은 내가이 일을 다음과 기대?

답변

3

타이프 라이터이에 도움이 Type Guards있다.

당신은 가질 수 user defined guard :

function isString(value: any): value is string { 
    return typeof value === 'string' || value instanceof String; 
} 

function foo(param: string | Foo) { 
    if (isString(param)) { 
     // param is string 
    } else { 
     // param is Foo 
    } 
} 

그러나 귀하의 경우에는 그냥 사용할 수 있습니다 typeof : Foo 인 경우

function foo(param: string | Foo) { 
    if (typeof param === "string") { 
     // param is string 
    } else { 
     // param is Foo 
    } 
} 

클래스는 당신은 또한 사용할 수 있습니다 instanceof :

function foo(param: string | Foo) { 
    if (param instanceof Foo) { 
     // param is Foo 
    } else { 
     // param is string 
    } 
} 
1

반환 형식은이 작업을 수행하려면 사용자 정의 유형 가드 구문을 사용해야합니다 :

function isString(value: any): value is string { 
    return typeof value === 'string' || value instanceof String; 
}