微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打字稿导入错误的角度

我使用如下语法在我的角度1应用程序(在打字稿中)导入角度

import * as angular from '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’,我也会导航到角度模拟角度定义.它应该导航到角度而不是模拟库……

如何避免这个问题?

编辑

以下是实施

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

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

angular.service('logger',Logger)

解决方法

这是因为angular-mock的打字是对角度的增强.换句话说,一个真正的ILogCall接口应该是:

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐