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

Angular + TypeScript + External Modules. How to maintain type information across files?

本文关键字:文件维护 类型 信息 何跨 外部 模块 Angular+TypeScript+      更新时间:2023-09-26

我使用的是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 PaginatorService = require('./paginator.service');)。然而,这似乎是多余的,因为在设置Angular模块时,我已经require() d了这个服务。

  • 我尝试在paginator.service.js上使用tsc --declaration生成一个声明文件,您可以在下面查看,但它没有解决问题。

自动生成的d.ts文件

declare class PaginatorService {
    currentPage: number;
    pageCount: number;
    pages: Array<Array<any>>;
    constructor();
}
export = PaginatorService;
  • 修改这个声明文件以声明模块(环境声明?)似乎是可行的,但为我需要迁移到CommonJS语法的100多个Angular服务手动这样做会使这种方法出现问题

我的问题是:对于使用CommonJS+Angular+TypeScript来要求正确的模块,然后让Angular的依赖项注入从那里接管,特别是在文件之间,建议使用什么模式

谢谢!

TS错误:找不到名称"PaginatorService"。

你在做

export class PaginatorService 

您需要将其作为导入

ES6

import {PaginatorService} from "./paginatorService"; 

旧式

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