我已经写了一个角4.3.0打字脚本库。当建立我的库,我看到下面的错误在 *.d.ts文件。
[at加载程序]中出现错误..\myLibrary\lib-commonjs\my-guard.service.d.ts:13:5 TS 2416:类型'MyGuard'中的属性'canActivate'无法指派给基底类型'CanActivate'中的相同属性。类型'(下一个:已激活路由快照,状态:路由器状态快照)=〉布尔值|承诺|观察...'不可分配给类型'(路径:已激活路由快照,状态:路由器状态快照)=〉布尔值|可观察|参数...'.类型'布尔值|承诺|可观察的'不可分配给类型'布尔值|可观察|类型“Observable”不能赋给类型“boolean|可观察|'Promise'。类型'Observable'无法指派给类型'Promise'。类型'Observable'中遗漏属性'[Symbol.toStringTag]'。
这是我的护卫长的样子
@Injectable()
export class MyGuard implements CanActivate {
canActivate( next: ActivatedRouteSnapshot ,state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return true;
}
}
删除返回类型(Observable)后,错误消失|承诺|boolean)。我想知道为什么我需要删除它才能让它工作。
canActivate( next: ActivatedRouteSnapshot ,state: RouterStateSnapshot) {
}
错误
6条答案
按热度按时间6tr1vspr1#
您所面临的错误是因为您复制了与您所使用的Angular版本不同的代码。
当您移除传回值时,错误便会消失,因为您已使函式与您计算机上的版本相容。
您可以巡览至计算机上的
CanActivate
,检查目前版本的函式签章。如果您使用的是Visual Studio程式码,您可以按住Ctrl并按一下它,巡览至其档案。wmtdaxz32#
@user911 -我最近开始学习Angular ,幸运的是遇到了同样的问题。
出现错误的原因可能是IDE意外地从“q”
import {Promise} from 'q'
导入了Promise;删除它,您甚至可以声明canActivate
方法的返回类型Observable< boolean>
|Promise< boolean>
|boolean
.当您移除
canActivate
方法的返回类型时,导入是应用正常工作的唯一原因。请尝试以下操作以更好地理解:
1.请确保定义
canActivate
方法的返回类型,并在定义类型时让IDE自动从q导入Promise或手动导入。1.正如我们所预料的那样,会有错误,现在从返回类型中删除
Promise< boolean>
,错误应该会消失,除非你用canActivate
方法返回一个承诺。dldeef673#
对我来说,修复它的是一个导入不匹配的问题。
我创建了一个接口并在类中实现了它。
在类中,我导入了正确的模块,但在接口声明中没有这样做。
这导致编译器对我大喊大叫,我花了一些时间才意识到这是因为导入,打字脚本编译器没有提到它。
3b6akqbq4#
为了匹配父函数签名,我必须指定类型
Observable<boolean|UrlTree>
然后错误就消失了。
jbose2ul5#
将此
(: Observable<boolean> | Promise<boolean> | boolean )
更改为:any
肯定对您有效lpwwtiir6#
对我来说,我把
Observable< Boolean> | Promise< Boolean> | Boolean
作为Observable< boolean> | Promise< boolean> | boolean
的返回类型,当我替换它时,它就工作了。