gpt4 book ai didi

angular - typescript 导入错误的 Angular

转载 作者:太空狗 更新时间:2023-10-29 17:28:12 30 4
gpt4 key购买 nike

我正在使用如下语法在我的 angular 1 应用程序( typescript )中导入 angular

   import * as angular from 'angular';

这从 angular-mocks 而不是从 angular 导入 Angular ,因此我的 ILogService 实现失败

ERROR in ./app/shared/Logger.factory.ts (38,7): error TS2420: Class 'Logger' incorrectly implements interface 'ILogService'. Types of property 'debug' are incompatible. Type '(...argument: any[]) => void' is not assignable to type 'ILogCall'.

即使我尝试从 vscode 导航到 'angular',我也会导航到 angular-mocks Angular 定义。它应该导航到 Angular 而不是模拟库......

如何避免这个问题?

编辑

下面是

的实现

我的实现是自定义服务,关于哪个 typescript 在编译期间出错(错误粘贴在上面)

class Logger implements ng.ILogService {
info(message:string) { //some custom logic in info method}
}

angular.service('logger', Logger)

最佳答案

这是因为 angular-mock 的输入是对 angular 的增强。换句话说,一个真正的 ILogCall 接口(interface)应该是:

interface ILogCall {
(...args: any[]): void; //from @types\angular\index.d.ts
logs: string[]; //from @types\angular-mocks\index.d.ts
}

所以在你的代码中:

info(message:string) { //some custom logic in info method}

您需要返回一个正确的 ILogCall 对象(包含所有成员)。 @TheChetan 和@Natarajan Nagarajugari 的回答可能会有帮助,但我不确定它是否会破坏您的 TypeScript 编写单元测试。

我的解决方案是在 info(message:string) 中:

info(message:string)
{
var logCall: any = (...args: any[]) => {};
logCall.logs = //something;

return logCall as ng.ILogCall;
}

关于angular - typescript 导入错误的 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652074/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com