javascript - Angular + TypeScript + 外部模組。如何在檔案之間維護型別資訊?
我正在使用 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 模組時已經使用require()引入了這個服務。我嘗試在
paginator.service.js上使用tsc --declaration來生成聲明文件,你可以在下面查看,但這並沒有解決問題。
自動生成的 d.ts 文件
declare class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor();
}
export = PaginatorService;
- 修改此聲明檔以宣告一個 module(環境聲明?)似乎可行,但對於我需要遷移到 CommonJS 語法的 100 多個 Angular 服務手動這麼做,使得這種方法變得有問題。
我的問題是:使用 CommonJS + Angular + TypeScript 時,有什麼推薦的模式來正確引入模組,然後讓 Angular 的依賴注入接管,尤其是跨檔案的情況下?
謝謝!
答案#1
TS 錯誤:找不到名稱 'PaginatorService'。
你正在做
export class PaginatorService
你需要將它導入為
ES6
import {PaginatorService} from "./paginatorService";
或
舊式
import paginatorService = require("./paginatorService");
import PaginatorService = paginatorService.PaginatorService;
