假设我有一个函数来检查参数是否是这样定义的字符串:
function isString(value: any): boolean {
return typeof value === 'string' || value instanceof String;
}
现在,当我使用此函数与typescript 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
}
}
我是否可以通过不同的方式定义isString,这样可以使if语句正确地缩小param的类型?
答案 0 :(得分:3)
您可以拥有Type Guards:
typeof
但在您的情况下,您可以使用function foo(param: string | Foo) {
if (typeof param === "string") {
// param is string
} else {
// param is Foo
}
}
:
Foo
如果instanceof
是一个班级,那么您也可以使用function foo(param: string | Foo) {
if (param instanceof Foo) {
// param is Foo
} else {
// param is string
}
}
:
NSString *path = [NSString stringWithFormat:@"%@/Documents/Small-mario.png", NSHomeDirectory()];
NSLog(@"path %@", path);
displayImg.image = [UIImage imageNamed:path];
答案 1 :(得分:1)
返回类型需要使用自定义类型保护语法才能工作:
function isString(value: any): value is string {
return typeof value === 'string' || value instanceof String;
}