我正在使用Angular 1.4,TypeScript 1.6和CommonJS外部模塊。Angular + TypeScript +外部模塊。如何維護跨文件的類型信息?
我有這個模塊中的三個文件:
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
,我$scope
一起注入pageService
使用設g依賴注入,當我給它一種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;
不過,我收到原子打字稿以下錯誤:
TS Error: Cannot find name 'PaginatorService'.
我已經試過
在
paginator.controller.js
文件中添加另一個import語句解決問題(即import PaginatorService = require('./paginator.service');
)。但是,這似乎是多餘的,因爲我已經在設置我的Angular模塊時已經使用了此服務。我試着使用
tsc --declaration
paginator.service.js
生成一個聲明文件,您可以在下面查看它,但它沒有解決問題。
自動生成的文件d.ts
declare class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor();
}
export = PaginatorService;
- 修改此聲明文件來聲明模塊(環境宣言?)似乎工作,但手工做這100+我需要遷移到CommonJS語法的角度服務使得這種方法存在問題。
我的問題是這樣的:什麼是使用CommonJS的+角+打字稿需要正確的模塊,然後讓角的依賴注入從那裏拿過來,特別是跨文件推薦的模式?
謝謝!
謝謝!你是對的。我實際上使用'export = PaginatorService'語法,因此它不會創建一個名稱空間(例如'foo.Foo')。 我的核心問題是,我是否需要在'paginator.module.ts'中有一個import語句來通知AngularJS該模塊的存在,而在'paginator.controller.ts'中只需要有關於'PaginatorService'的類型信息?或者是否有一種模式需要在AngularJS模塊級別使用一次,然後依賴Angular的依賴注入? –
@JonathanGuerrera更新了答案。剛剛用'PaginatorService'取代'foo' :) – basarat
@JonathanGuerrera'或者是有一種模式需要它在AngularJS模塊級別,然後依賴於Angular的依賴注入'你需要兩者。怪角。移動反應:P – basarat