2015-12-11 76 views
4

我正在使用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 --declarationpaginator.service.js生成一個聲明文件,您可以在下面查看它,但它沒有解決問題。

自動生成的文件d.ts

declare class PaginatorService { 
    currentPage: number; 
    pageCount: number; 
    pages: Array<Array<any>>; 
    constructor(); 
} 
export = PaginatorService; 
  • 修改此聲明文件來聲明模塊(環境宣言?)似乎工作,但手工做這100+我需要遷移到CommonJS語法的角度服務使得這種方法存在問題。

我的問題是這樣的:什麼是使用CommonJS的+角+打字稿需要正確的模塊,然後讓角的依賴注入從那裏拿過來,特別是跨文件推薦的模式?

謝謝!

回答

1

TS Error: Cannot find name 'PaginatorService'.

你正在做

export class PaginatorService 

您需要將其導入爲

ES6

import {PaginatorService} from "./paginatorService"; 

舊風格的

import paginatorService = require("./paginatorService"); 
import PaginatorService = paginatorService.PaginatorService; 
+0

謝謝!你是對的。我實際上使用'export = PaginatorService'語法,因此它不會創建一個名稱空間(例如'foo.Foo')。 我的核心問題是,我是否需要在'paginator.module.ts'中有一個import語句來通知AngularJS該模塊的存在,而在'paginator.controller.ts'中只需要有關於'PaginatorService'的類型信息?或者是否有一種模式需要在AngularJS模塊級別使用一次,然後依賴Angular的依賴注入? –

+0

@JonathanGuerrera更新了答案。剛剛用'PaginatorService'取代'foo' :) – basarat

+2

@JonathanGuerrera'或者是有一種模式需要它在AngularJS模塊級別,然後依賴於Angular的依賴注入'你需要兩者。怪角。移動反應:P – basarat

相關問題