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'.מה שניסיתי
הוספת פקודת import נוספת בקובץ
paginator.controller.jsפותרת את הבעיה (כלומרimport PaginatorService=require('./paginator.service');). עם זאת, זה נראה מיותר כי אני כברrequire()את השירות הזה כאשר הקמתי את מודול ה-Angular שלי.ניסיתי להשתמש ב-
tsc --declarationעלpaginator.service.jsכדי ליצור קובץ הצהרה, שאותו תוכלו לצפות למטה, אבל זה לא פתר את הבעיה.
קובץ d.ts שנוצר אוטומטית
declare class PaginatorService {
currentPage: number;
pageCount: number;
pages: Array<Array<any>>;
constructor();
}
export = PaginatorService;
- שינוי קובץ ההצהרה הזה כדי להצהיר על מודול (הצהרה סביבתית?) נראה שעבד, אבל ביצוע זה ידנית עבור יותר מ-100 שירותי Angular שאני צריך להעביר לסינטקס CommonJS הופך את הגישה הזו לבעייתית.
השאלה שלי היא זו: מהו תבנית מומלצת לשימוש ב-CommonJS + Angular + TypeScript כדי לדרוש את המודולים הנכונים ואז לתת ל-Injection של התלותות של Angular לקחת אחריות מכאן, במיוחד בקבצים שונים?
תודה!
תשובה #1
שגיאת TS: לא ניתן למצוא את השם 'PaginatorService'.
אתה עושה
export class PaginatorService
אתה צריך לייבא את זה כ
ES6
import {PaginatorService} from "./paginatorService";
או
סגנון ישן
import paginatorService = require("./paginatorService");
import PaginatorService = paginatorService.PaginatorService;
