TypeScript
Transformer nedir?
Transformer fonksiyonlarını öğrenirsin.
Transformer fonksiyonu
Bir transformer, TypeScript derleyicisinde AST düğümlerini dönüştüren fonksiyondur. ts.TransformerFactory<T> türündedir: bir TransformationContext alır ve bir visitor fonksiyonu döndürür. Visitor her düğümü alır ve aynı veya yeni bir düğüm döndürür.
import ts from "typescript";
const transformer: ts.TransformerFactory<ts.SourceFile> =
(context) => (node) => {
return ts.visitEachChild(node, visit, context);
};
Transformer'lar ts.transform ile kaynak dosyalara uygulanır.
ts.transform ve visitEachChild
ts.transform(source, transformers) bir kaynak düğümü verilen transformer'larla dönüştürür ve bir TransformResult döndürür. result.transformed[0] dönüştürülmüş kök düğümdür. Alt düğümleri dönüştürmek için ts.visitEachChild(node, visitor, context) kullanılır.
const result = ts.transform(sf, [transformer]);
const out = result.transformed[0];
result.dispose();
Sonuç bitince result.dispose() ile belleği temizlersin.
Uygulama Identity transformer
const x = 1; kaynağından bir SourceFile oluştur. ts.TransformerFactory tanımla: visitor düğümü değiştirmeden döndürsün (identity). ts.transform ile uygula ve ts.createPrinter ile dönüştürülmüş kaynağı yazdır.
Örnek çözümü göster
import ts from "typescript";
const sourceText = "const x = 1;";
const sf = ts.createSourceFile("app.ts", sourceText, ts.ScriptTarget.Latest, true);
const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => (node) => {
return node;
};
const result = ts.transform(sf, [transformer]);
const printer = ts.createPrinter();
process.stdout.write(printer.printFile(result.transformed[0] as ts.SourceFile));
result.dispose();
Kendini test et
-
Bir TransformerFactory hangi imzaya sahiptir?
- (node) => node
- (source) => string
- (program) => TypeChecker
- (context) => (node) => node
Cevabı göster
(context) => (node) => node — TransformerFactory, TransformationContext alır ve (node) => node visitor fonksiyonu döndürür. Doğrudan node veya source almaz.
-
Alt düğümleri ziyaret et
const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => (node) => {
return ts.____(node, visit, context);
};
Cevabı göster
const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => (node) => {
return ts.visitEachChild(node, visit, context);
};
-
Transformer parçaları
- ts.TransformerFactory
- Transformer fonksiyon türü
- ts.transform
- Dönüştürmeyi uygular
- visitEachChild
- Alt düğümleri dönüştürür
- TransformResult
- Dönüştürülmüş kökü taşır
Sıradaki ders: Node oluşturma