【发布时间】:2018-08-25 22:51:33
【问题描述】:
我编写了一个 Angular 4.3.0 打字稿库。在构建我的库时,我在 *.d.ts 文件中看到了以下错误。
[at-loader] 中的错误 ..\myLibrary\lib-commonjs\my-guard.service.d.ts:13:5 TS2416:“MyGuard”类型中的属性“canActivate”不可分配给基本类型“CanActivate”中的相同属性。 输入'(下一个:ActivatedRouteSnapshot,状态:RouterStateSnapshot)=>布尔|承诺 |观察...' 不可分配给类型 '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean |可观察 |公...'。 输入'布尔|承诺 | Observable' 不可分配给类型 'boolean |可观察 |承诺'。 类型 'Observable' 不可分配给类型 'boolean |可观察 |承诺'。 类型“Observable”不可分配给类型“Promise”。 “Observable”类型中缺少属性“[Symbol.toStringTag]”。
这就是我的后卫的样子
@Injectable()
export class MyGuard implements CanActivate {
canActivate( next: ActivatedRouteSnapshot ,state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return true;
}
}
在我从 canActivate 中删除返回类型 (Observable | Promise | boolean ) 后,错误消失了。我想了解为什么我需要删除它才能使其正常工作。
canActivate( next: ActivatedRouteSnapshot ,state: RouterStateSnapshot) {
}
错误
【问题讨论】:
-
如果您删除它,TypeScript 将根据您的返回语句推断返回类型。我假设您要返回这三种类型中的一种,因此返回类型将是与接口的返回签名匹配的单一类型。
-
您使用的是哪个版本的打字稿?我刚刚尝试使用 v 2.5.3 并且它可以正常工作(虽然在 angular 5 上,但界面从那时起就没有卡住)
-
@David - 我使用的是 typescript 2.7.2 版
-
你是否在主模块,部分提供者中添加你的后卫?它解决了我的问题
标签: angular typescript angular2-routing