typescript - دوباره صادر کردن ماژولهای ES6 در TS 1.7؟
من کمی در بازصادرات TS گم شدهام. فرض کنید من یک جفت ماژول آزمایشی ایجاد میکنم؛
test1.ts;
export function test1() {
return 'test';
}
test2.ts;
export function test2() {
return 'test';
}
من فکر میکنم باید بتوانم سپس کاری شبیه به این انجام دهم؛
combined.ts;
export * from './test1';
export * from './test2';
module.exports = {
test1: test1,
test2: test2
};
اما، چنین شانسی نبود. به نظر میرسد مسائل زیادی در GitHub وجود دارد که روشهای مختلفی برای این موضوع را بررسی میکنند، از جمله یک روش قدیمی که از export import * from './test1' استفاده میکند، اما همه آنها به نظر میرسد بر سر معنای واقعی مشخصات ES6 بحث میکنند و هیچکدام واقعاً کار نمیکنند..
راه درست برای انجام یک رولآپ مثل این چیست؟ آیا من فقط در مسیر اشتباه برای تقسیم یک ماژول در فایلها هستم؟ آیا استفاده از فضاهای نام در اینجا مناسبتر است؟
پاسخ شماره ۱
شما نباید از module.exports زمانی که با ماژولهای ES کار میکنید استفاده کنید؛ module.exports بخشی از ماژولهای CommonJS است، نه بخشی از ماژولهای EcmaScript.
رولآپ، صادر کردن مستقیم
ماژول رولآپ صحیح شما به سادگی خواهد بود:
export * from './test1';
export * from './test2';
سپس برای استفاده از رولآپ:
import * as rollup from './combined';
// or `import { test1, test2 } from './combined'`;
// or any other valid import
rollup.test1();
rollup.test2();
رولآپ، افزودن اشیاء فضای نام
اگر میخواهید test1 و test2 را با نامگذاری اضافی صادر کنید، از نحو export {} استفاده کنید:
import * as test1 from './test1';
import * as test2 from './test2';
export { test1, test2 };
سپس کاربرد به صورت زیر میشود:
import * as rollup from './combined';
rollup.test1.test1();
rollup.test2.test2();
رولآپ، استفاده از نامهای صادراتی مختلف
شما همچنین میتوانید نامها را با استفاده از as تغییر مسیر دهید اگر با برخی نامها تداخل دارید، درست مانند import:
export { test1 as t1 } from './test1';
export { test2 as t2 } from './test2';
سپس کاربرد به صورت زیر میشود:
import * as rollup from './combined';
rollup.t1();
rollup.t2();
