tsc - Finns det ett sätt att hoppa över typkontroll för snabbare TypeScript-kompilering?
När man använder babel-preset-typescript, hoppas typkontrollen över. Detta är nästan säkert snabbare och kräver mindre minne än att använda vanlig tsc eftersom det inte finns någon typkontrollöverhead, och bindnings- och kontrollstegen hoppas helt över (det är bara att analysera och ta bort typer).
Jag vet att exakt samma sak inte finns tillgänglig med TS-kompilatorn API, eftersom Babel använder en helt annan parser (Bablyon). Men finns det ett sätt att göra något liknande och hoppa över bindning och kontroll för snabbare kompilering? Det ser ut som om ts.createProgram automatiskt inkluderar typkontroll.
Svar #1
Funktionen du är intresserad av är ts.transpileModule (Källa/Dokumentation).
Till exempel:
const compilerOptions: ts.CompilerOptions = {
// you'll probably want to load this from a tsconfig.json
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS
};
const result = ts.transpileModule("const t = 5;", {
compilerOptions,
reportDiagnostics: false
});
console.log(result.outputText); // "var t = 5;"
Så du skulle vilja iterera över alla TypeScript-filvägar, läsa dem från disken, transpile dem och sedan skriva dem alla till filsystemet som js-filer. Du skulle kunna göra läsningen och skrivningen till filsystemet parallellt också (kompilatorn gör detta synkront, så att göra detta asynkront kommer att ge en prestandaförbättring).
Som du kanske har märkt kommer ts.transpileModule dock fortfarande att skapa ett program, men det bör ändå vara mycket snabbare än den vanliga processen eftersom det emitterar med kunskap om endast en fil i taget. För att hoppa över att skapa ett program tror jag att den interna emitFiles-funktionen skulle behöva användas... även om det skulle kräva att implementera den interna EmitResolver-typen för att stödja scenariot, vilket jag inte är säker på om det är möjligt att göra korrekt utan binding (jag vet inte mycket om det, så kan inte säga säkert).
