deno - tsc kompilerer TypeScript som importerer ved bruk av filendelse


Jeg skriver TypeScript-koden min på en økosystem-uavhengig måte. Jeg bestemte meg for å inkludere filendelser i imports, i samsvar med weben og Deno.

import xyz from "./foo.ts";

Hvordan kan jeg få TypeScript-kompilatoren (tsc) til å kompilere disse filene uten følgende feil:

error TS2691: An import path cannot end with a '.ts' extension.

Jeg har så langt prøvd følgende i min tsconfig.json uten hell:

{
    "compilerOptions": {
        "paths": {
            "*.js": ["*"],
            "*.ts": ["*"]
        },
        ...
    },
    ...
}

Svar #1

Du kan kompilere uten feil ved å fortelle tsc å ignorere alle slike import-setninger.

// @ts-ignore
import xyz from "./foo.ts";

For å forstå hvorfor du ikke kan konfigurere deg ut av det, må vi grave inn i de underliggende årsakene til hvorfor TypeScript ikke vil at du skal bruke .ts-utvidelsen inne i import-setningen.

tsc skriver ikke om modulfilnavnene, så hvis du gir det

import xyz from "./foo.ts"

det produserer ikke en foo.js-fil, og den resulterende kompilerte ECMAScript (uansett hvilken versjon du spesifiserer) sier fortsatt å importere ./module.ts. Siden poenget med å kompilere til ECMAScript er å kvitte seg med TypeScript-filene, er det å referere til en .ts-fil i outputen åpenbart ikke bra.

Det du ønsker har blitt tatt opp i TypeScript GitHub-issues (se #27481, #11901). Du kan vurdere å bli med i diskusjonen på GitHub.

Svar #2

Jeg bruker for øyeblikket TypeScript-kompilator-APIen (for øyeblikket i beta) for å løse dette problemet... jeg vil legge ut flere detaljer snart.

Relaterte artikler