首页 文章

Angular TypeScript外部模块 . 如何跨文件维护类型信息?

提问于
浏览
4

我正在使用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 回答

  • 1

    TS错误:找不到名称'PaginatorService' .

    你在做

    export class PaginatorService
    

    您需要将其导入为

    ES6

    import {PaginatorService} from "./paginatorService";
    

    要么

    旧式

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

相关问题