چگونه با استفاده از تایپاسکریپت کامپایل کنیم، فقط فایلهای خاص؟
پس این برنامه من است. من میخواهم یک برنامه با استفاده از تایپاسکریپت برای ویندوز و مک بسازم. با این حال، از آنجایی که میخواهم کد تایپاسکریپت را به کد جاوااسکریپت تبدیل کنم، میخواهم در صورت امکان به برخی ویژگیها دست پیدا کنم. میخواهم فقط کد ویندوز را وقتی که میخواهم و فقط کد مک را وقتی که میخواهم دریافت کنم.
راهی که من میخواهم انجام دهم، یا حداقل امتحان کنم، استفاده از exclude در tsconfig.json است.
بیایید یک مثال ساده بزنیم. در پروژه اصلی من یک پوشه src خواهم داشت. داخل آن، یک فایل code.ts خواهم داشت. همچنین: فایلهای code.darwin.ts و code.windows.ts.
code.darwin.ts:
const Logger = () => {
console.log('DARWIN');
}
export default Logger;
کد.windows.ts:
const Logger = () => {
console.log('WINDOWS');
}
export default Logger;
code.ts:
import Logger from './code.darwin';
import Logger from './code.windows';
Logger();
در این مثال، اگر فقط بخواهم کد مک را داشته باشم، از tsconfig.json استفاده میکنم:
{
"compilerOptions": {
"target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
"strict": true, /* Enable all strict type-checking options. */
"alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
"typeRoots": ["./node_modules/@types"], /* List of folders to include type definitions from. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
},
"exclude": ["**/*.windows.ts"],
}
اما هنوز، من خطای ts clash در code.ts دارم چون همان چیز را از دو فایل وارد کردهام. ایدهای برای حل آن دارید؟
راهی که من انجام میدهم الزامآور نیست. من به پیشنهادات دیگر با استفاده از تایپاسکریپت باز هستم. مهمترین چیز این است که نهایتاً بتوانم تنها کد یک پلتفرم سیستمعامل را دریافت کنم.
پاسخ شماره ۱
شما میتوانید از قابلیت ایمپورت داینامیک تایپاسکریپت استفاده کنید. شما باید از process.platform استفاده کنید تا آن کار کند.
فایل code.ts خود را ویرایش کنید به:
import(`./code.${process.platform}`).then((logger) => {
logger();
});
تمام فایلهای دیگر را همانطور نگه دارید.
به عبارت واردات توجه کنید. آن را مطابق نیاز خود تنظیم کنید.
