我写了一个有角度的4.3.0打字稿库 . 在构建我的库时,我在* .d.ts文件中看到了以下错误 .
[at-loader]中的错误.. \ myLibrary \ lib-commonjs \ my-guard.service.d.ts:13:5 TS2416:'MyGuard'类型中的属性'canActivate'不能分配给基础中的同一属性输入'CanActivate' . 输入'(next:ActivatedRouteSnapshot,state:RouterStateSnapshot)=> boolean |承诺| Observ ...'不能赋值为'(route:ActivatedRouteSnapshot,state:RouterStateSnapshot)=> boolean |可观察的|公关......“ . 输入'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) {
}
错误
1 回答
@ user911 - 我最近开始学习角度,幸好想出了同样的问题 .
错误的原因可能是您的IDE意外地从'q'
import {Promise} from 'q'
导入了Promise;删除它,您甚至可以声明canActivate
方法的返回类型,即Observable< boolean>
|Promise< boolean>
|boolean
.当您删除
canActivate
方法的返回类型时,导入是您的应用程序正常工作的唯一原因 .试着这个以便更好地理解:
确保定义
canActivate
方法的返回类型,并在定义类型时让IDE自动从q导入Promise或手动导入 .正如我们所期望的那样会出现错误,现在从返回类型中删除
Promise< boolean>
,除非您使用canActivate
方法返回一个承诺,否则错误应该消失 .