Hvordan transpilerer man med TypeScript, bare spesifikke filer?


Så her er planen min. Jeg vil bygge en applikasjon ved å bruke Typescript for Windows og Mac. Men, siden jeg skal transpile Typescript-koden til Javascript-kode, vil jeg oppnå noen funksjoner om mulig. Jeg vil få kun Windows-kode når jeg ønsker, og kun Mac-kode når jeg ønsker.

Måten jeg vil gjøre det på, eller i det minste prøve, er å bruke exclude i tsconfig.json.

La oss ta et enkelt eksempel. I rotprosjektet ville jeg hatt en src-mappe. Inne i den ville jeg hatt en code.ts-fil. Også: code.darwin.ts og code.windows.ts-filer.

code.darwin.ts:

const Logger = () => {
    console.log('DARWIN');
}

export default Logger;

kode.windows.ts:

const Logger = () => {
    console.log('WINDOWS');
}

export default Logger;

kode.ts:

import Logger from './code.darwin';
import Logger from './code.windows';

Logger();

I dette eksemplet, hvis jeg bare vil ha Mac-kode, ville jeg brukt 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"],
}

Men likevel, jeg har en ts kollisjonsfeil i code.ts fordi jeg importerer det samme fra 2 filer. Noen idé om hvordan man kan løse det?

Måten jeg gjør det på er ikke en nødvendighet. Jeg er åpen for andre forslag ved bruk av Typescript. Det viktigste er at jeg til slutt vil kunne få bare én operativsystemplattformkode.

Svar #1

Du kan bruke funksjonen for dynamisk import i Typescript. Du bør bruke process.platform for å få det til å fungere.

Rediger filen code.ts for å:

import(`./code.${process.platform}`).then((logger) => {
    logger();
});

Hold alle andre filer like.

Merk importuttrykket. Juster det etter dine behov.

Relaterte artikler