打字稿导入错误 angular
typescript importing wrong angular
我正在使用如下语法在我的 angular 1 个应用程序(打字稿)中导入 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 而不是模拟库...
如何避免这个问题?
编辑
下面是
的实现
我的实现是自定义服务,编译时打字稿报错(错误贴在上面)
class Logger implements ng.ILogService {
info(message:string) { //some custom logic in info method}
}
angular.service('logger', Logger)
试试这个..
import * as _angular_ from 'angular';
declare global {
const angular: typeof _angular_;
}
希望对您有所帮助
这是因为 angular-mock 的输入是对 angular 的增强。也就是说,一个真正的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}
您需要 return 一个正确的 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 1 个应用程序(打字稿)中导入 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 而不是模拟库...
如何避免这个问题?
编辑
下面是
的实现我的实现是自定义服务,编译时打字稿报错(错误贴在上面)
class Logger implements ng.ILogService {
info(message:string) { //some custom logic in info method}
}
angular.service('logger', Logger)
试试这个..
import * as _angular_ from 'angular';
declare global {
const angular: typeof _angular_;
}
希望对您有所帮助
这是因为 angular-mock 的输入是对 angular 的增强。也就是说,一个真正的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}
您需要 return 一个正确的 ILogCall 对象(包含所有 成员 )。 @TheChetan 和@Natarajan Nagarajugari 的回答可能会有帮助,但我不确定它是否会破坏您的 TypeScript 编写单元测试。
我的解决方案在 info(message:string):
info(message:string)
{
var logCall: any = (...args: any[]) => {};
logCall.logs = //something;
return logCall as ng.ILogCall;
}