class - Farklı dosyalardan sınıflarla bir TypeScript modülü dışa aktar
TypeScript modüllerini sınıflarla ayrı dosyalara nasıl böleceğimizle ilgili birkaç soru var ama şimdiye kadar benim sorunuza uygulanmış bir çözüm yok.
Bir modülüm var (store), içinde iki sınıf (Person ve SerialisedRecord) bulunuyor. Her iki sınıf da aynı dosyada olduğunda, derleme ve ihracat sorunsuz çalışıyor.
Şimdi her sınıf için bir dosya istiyorum (Person.ts ve SerialisedRecord.ts), zaten sahip olduğum aynı ihracat şemasını takip ederek. Ama bunu nasıl başaracağımı bilmiyorum.
İşte benim ilk durumum:
store.ts
export module store {
export class Person {
public fullName: string = '';
constructor(firstName: string, lastName: string) {
this.fullName = `${firstName} ${lastName}`;
}
}
export class SerialisedRecord {
constructor(public serialised: string, public id: string) {}
}
}
store.ts'i store.js (ES5) olarak derlediğimde, tam olarak istediğimi elde ediyorum (iki sınıfı tek bir modülde dışa aktaran bir SystemJS modülü):
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var store;
return {
setters:[],
execute: function() {
(function (store) {
var Person = (function () {
function Person(firstName, lastName) {
this.fullName = '';
this.fullName = firstName + " " + lastName;
}
return Person;
}());
store.Person = Person;
var SerialisedRecord = (function () {
function SerialisedRecord(serialised, id) {
this.id = id;
this.serialised = serialised;
}
return SerialisedRecord;
}());
store.SerialisedRecord = SerialisedRecord;
})(store = store || (store = {}));
exports_1("store", store);
}
}
});
Şimdi bunu yapmayı denedim:
export module store {
export {Person} from "./Person";
export {SerialisedRecord} from "./SerialisedRecord";
}
Ama bana şunu söylemede başarısız oluyor:
hata TS1194: İhracat deklarasyonlarına bir ad alanında izin verilmez.
Ne yaptığımı yanlış yaptığımı söyleyebilir misin?
İşte benim tsconfig.json dosyam:
{
"compilerOptions": {
"module": "system",
"moduleResolution": "node",
"noEmitOnError": true,
"noImplicitAny": false,
"noImplicitReturns": true,
"removeComments": true,
"target": "es5"
},
"exclude": [
"node_modules",
"typings/browser",
"typings/browser.d.ts"
]
}
Cevap #1
Store modülünü kaldırırsanız harika çalışıyor:
store.ts:
export { Person } from "./Person";
export { SerialisedRecord } from "./SerialisedRecord";
index.ts:
import { Person, SerialisedRecord } from "./store";
let p = new Person("first", "last");
Düzenle
Eğer ad alanı yapısını korumanız gerekiyorsa, şöyle bir şey deneyebilirsiniz:
import Person from "./Person";
import SerialisedRecord from "./SerialisedRecord";
export default {
store: {
Person,
SerialisedRecord
}
}
