我写了一个有角度的4.3.0打字稿库。在构建我的库时,我在* .d.ts文件中看到了以下错误。
[at-loader]中的错误.. \ myLibrary \ lib-commonjs \ my-guard.service.d.ts:13:5 TS2416:财产可以激活'在类型' MyGuard'不能分配给基本类型中的同一属性' CanActivate'。 键入'(下一个:ActivatedRouteSnapshot,状态:RouterStateSnapshot)=>布尔值|承诺| OBSERV ...'不能分配类型'(route:ActivatedRouteSnapshot,state:RouterStateSnapshot)=>布尔值|可观察的|镨...&#39 ;. 输入' boolean |承诺|观察到的'不能赋值为' boolean |可观察的|诺&#39 ;. 输入' Observable'不能赋值为' boolean |可观察的|诺&#39 ;. 输入' Observable'不能分配类型'承诺'。 财产' [Symbol.toStringTag]'类型' Observable'
中缺少
这就是我的后卫的样子
@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) {
}
错误
答案 0 :(得分:2)
您面临的错误是因为您复制了与所使用的版本不同的Angular代码。
删除返回值后,错误消失了,因为您使该功能与计算机上的版本兼容。
您可以通过导航到计算机上的CanActivate
来检查当前版本的功能签名。如果您使用的是Visual Studio Code,则可以按Ctrl,然后单击它以导航到其文件。
答案 1 :(得分:1)
@ user911-我最近开始学习angular,幸运的是遇到了同样的问题。
该错误的原因可能是您的IDE意外地从'q'import {Promise} from 'q'
导入了Promise;删除它,甚至可以声明canActivate
方法的返回类型为Observable< boolean>
| Promise< boolean>
| boolean
。
当删除canActivate
方法的返回类型时,导入是您的应用正常运行的唯一原因。
请尝试以下操作以更好地理解:
确保您定义了canActivate
方法的返回类型,并在定义类型时让IDE自动从q导入Promise或手动将其导入。
我们希望会出现错误,现在将Promise< boolean>
从返回类型中删除,除非您使用canActivate
方法返回了诺言,否则错误应该消失。
答案 2 :(得分:0)
问题出在返回的类型中。 这对我有用:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> |
boolean | UrlTree {
}
答案 3 :(得分:0)
将此(: Observable<boolean> | Promise<boolean> | boolean )
更改为:any
肯定适合您
答案 4 :(得分:0)
对我来说,解决此问题的原因是导入不匹配。
我创建了一个接口,并在一个类中实现了它。
在该类中,我导入了正确的模块,但是在接口声明中却没有这样做。
这导致编译器对我大吼大叫,花了我一些时间才意识到这是由于导入, Typescript编译器没有提及它。
答案 5 :(得分:-1)
对我来说,我输入了Observable< Boolean> | Promise< Boolean> | Boolean
的返回类型Observable< boolean> | Promise< boolean> | boolean
istead。
当我更换它时可以使用。