javascript - Angular + TypeScript + Ulkoiset moduulit. Kuinka ylläpitää tyyppitietoa tiedostojen välillä?
Käytän Angular 1.4:ää, TypeScript 1.6:ta ja CommonJS-ulkoisia moduuleja.
Minulla on kolme tiedostoa tässä moduulissa:
paginator.module.ts
paginator.service.ts
paginator.controller.ts
paginator.module.ts näyttää tältä:
import PaginatorService = require('./paginator.service');
import PaginatorCtrl = require('./paginator.controller');
var Paginator = angular.module('paginator', [])
.service('pageService', PaginatorService)
.controller('pageCtrl', PaginatorCtrl);
Tässä on paginator.service.ts:
class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor() {
this.currentPage = 0;
}
}
export = PaginatorService;
Tiedostossa paginator.controller.ts injektoin pageService yhdessä $scope:n kanssa riippuvuuden injektion avulla, ja odotan näkeväni tyyppitiedot, kun annan sille tyypiksi 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;
Kuitenkin saan seuraavan virheen atom-typescriptissä:
TS Error: Cannot find name 'PaginatorService'.Mitä olen yrittänyt
Toisen tuontilauseen lisääminen tiedostoon
paginator.controller.jsratkaisee ongelman (eliimport PaginatorService=require('./paginator.service');). Tämä kuitenkin vaikuttaa ylimääräiseltä, koska olen jorequire()n tämän palvelun luodessani Angular-moduulini.Yritin käyttää
tsc --declarationtiedostoonpaginator.service.jsluodakseni deklarointitiedoston, jonka voit nähdä alla, mutta se ei ratkaissut ongelmaa.
Automaattisesti luotu d.ts-tiedosto
declare class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor();
}
export = PaginatorService;
- Tämän deklarointitiedoston muokkaaminen moduulin (ambientti-deklarointi?) ilmoittamiseksi näytti toimivan, mutta tämän tekeminen manuaalisesti yli 100 Angular-palvelulle, jotka minun täytyy siirtää CommonJS-syntaksiin, tekee tästä lähestymistavasta ongelmallisen.
Kysymykseni on tämä: Mikä on suositeltu malli CommonJS:n, Angularin ja TypeScriptin käyttämiseen oikeiden modulien vaatimiseen ja sen jälkeen Angularin riippuvuuksien injektion antamiseen hoitaa loput, erityisesti tiedostojen välillä?
Kiitos!
Vastaus #1
TS-virhe: Nimeä 'PaginatorService' ei löydy.
Sinä teet
export class PaginatorService
Sinun täytyy tuoda se sisään nimellä
ES6
import {PaginatorService} from "./paginatorService";
tai
Vanha tyyli
import paginatorService = require("./paginatorService");
import PaginatorService = paginatorService.PaginatorService;
