首页 文章

TS2416:类型'MyGuard'中的属性'canActivate'不能分配给基本类型'CanActivate'中的相同属性

提问于
浏览
2

我写了一个有角度的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 回答

  • 0

    @ user911 - 我最近开始学习角度,幸好想出了同样的问题 .

    错误的原因可能是您的IDE意外地从'q' import {Promise} from 'q' 导入了Promise;删除它,您甚至可以声明 canActivate 方法的返回类型,即 Observable< boolean> | Promise< boolean> | boolean .

    当您删除 canActivate 方法的返回类型时,导入是您的应用程序正常工作的唯一原因 .

    试着这个以便更好地理解:

    • 确保定义 canActivate 方法的返回类型,并在定义类型时让IDE自动从q导入Promise或手动导入 .

    • 正如我们所期望的那样会出现错误,现在从返回类型中删除 Promise< boolean> ,除非您使用 canActivate 方法返回一个承诺,否则错误应该消失 .

相关问题