我有一个如下功能,我无法将其包裹住。函数如何返回多种类型,每种类型如何使用?
function(): Observable<Type> | Promise<Type> | Type {
...
}
似乎使用pipe(|)来指定可以返回多个值。我不明白的是什么时候使用?我怀疑发出subscribe
时会使用Observable,默认情况下会使用Promise,而在使用await
调用该函数时会使用直截了当的Type。
如果我是对的,那就太好了!我似乎找不到有关此功能的文档,因此我可以学习更多。你能帮我吗?我怀疑我的问题是我不知道Google要搜索什么。
更新:其他代码示例
以下是提供多个返回类型的代码示例,但我仅返回布尔类型。
@Injectable()
export class AuthGuard implements CanActivate, CanActivateChild {
constructor(private authService: AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) :
Observable<boolean> | Promise<boolean> | boolean {
return this.authService.isAuthenticated()
.then((authenticated: boolean) => {
if (authenticated) {
return true;
} else {
this.router.navigate(['/']);
}
});
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) :
Observable<boolean> | Promise<boolean> | boolean {
return this.canActivate(route, state);
}
}
与将其包装在Promise或Observable(用于订阅)中相比,是什么决定了是否按原样返回Type
?
答案 0 :(得分:2)
在函数体内,您将决定何时返回哪种类型的结果。使用返回值时,您不直接知道结果的类型。因此,您可以cast
结果:
function a(foo: string): string | boolean {
if (foo) return true
return "my string value"
}
const b = (a("") as boolean)
const c = (a("hello") as string)
在这种情况下,b
为typeof boolean
,而c
为string
。
答案 1 :(得分:0)
原因
无法确定在哪种情况下返回哪种类型。这是因为对TypeScript唯一重要的是,函数主体中返回的类型可以分配给其定义中使用的类型。
考虑这个愚蠢的例子:
function foo(): string | number | boolean {
return 0;
}
在类型级别,此功能没有任何问题。世界上不可能返回string | boolean
,但这没关系。重要的是0
可分配给string | number | boolean
。
您可以做什么
您可以删除返回类型定义,然后查看推断的返回类型是什么。