我正在使用Angular 1.4,TypeScript 1.6和CommonJS外部模块 .
我在这个模块中有三个文件:
paginator.module.ts
paginator.service.ts
paginator.controller.ts
paginator.module.ts
看起来像这样:
import PaginatorService = require('./paginator.service');
import PaginatorCtrl = require('./paginator.controller');
var Paginator = angular.module('paginator', [])
.service('pageService', PaginatorService)
.controller('pageCtrl', PaginatorCtrl);
这是 paginator.service.ts
:
class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor() {
this.currentPage = 0;
}
}
export = PaginatorService;
在 paginator.controller.ts
中,我使用依赖注入注入 pageService
和 $scope
,当我给它一个 PaginatorService
类型时,我希望看到类型信息 .
class PaginatorController {
scope: ng.IScope;
pageService: PaginatorService;
/**
* @param $scope
* @param pageService
*/
constructor($scope: ng.IScope, pageService: PaginatorService) {
this.scope = $scope;
this.pageService = pageService;
}
export = PaginatorController;
但是,我在atom-typescript中收到以下错误:
TS Error: Cannot find name 'PaginatorService'.
我尝试了什么
-
在
paginator.controller.js
文件中添加另一个import语句可以解决问题(即import PaginatorService = require('./paginator.service');
) . 但是,这似乎是多余的,因为我在设置Angular模块时已经有了这项服务 . -
我尝试在
paginator.service.js
上使用tsc --declaration
生成一个声明文件,您可以在下面查看,但它没有解决问题 .
Autogenerated d.ts file
declare class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor();
}
export = PaginatorService;
- 修改此声明文件以声明模块(环境声明?)似乎有效,但是为我需要迁移到CommonJS语法的100个Angular服务手动执行此操作会使此方法出现问题 .
我的问题是: What is a recommended pattern for using CommonJS + Angular + TypeScript to require the correct modules and then let Angular's dependency injection take over from there, especially across files?
谢谢!
1 回答
你在做
您需要将其导入为
ES6
要么
旧式