CodeBlanks Logo Icon CodeBlanks

ts.createProgram

Program oluşturmayı ve kaynak dosyaları öğrenirsin.

ts.createProgram nedir?

ts.createProgram, TypeScript derleyicisinde bir derlemenin başlangıç noktasıdır. Dönen Program nesnesi kaynak dosyaları, derleyici seçeneklerini ve tür denetleyiciye erişimi bir arada tutar. Dosya adları, derleyici seçenekleri ve isteğe bağlı bir CompilerHost ile çağrılır.

import ts from "typescript";

const program = ts.createProgram(
  ["app.ts"],
  ts.getDefaultCompilerOptions()
);

const sources = program.getSourceFiles();

Program üzerinden kaynak dosyalar, semboller ve türler gibi tüm derleme verilerine ulaşırsın.

SourceFile ve CompilerHost

Her SourceFile, TypeScript AST'sinin kök düğümüdür ve SyntaxKind.SourceFile türündedir. .fileName, .statements ve .getText() özellikleri yaygındır. Diskten okumak yerine bellekteki kaynak için bir CompilerHost verirsin; getSourceFile yöntemi ts.createSourceFile çağırır.

const host: ts.CompilerHost = {
  getSourceFile: (name, lang) =>
    ts.createSourceFile(name, code, lang, true),
  // ... diğer yöntemler
};

const program = ts.createProgram(["app.ts"], {}, host);

Uygulama Bellekten program oluştur

Bellekteki app.ts dosyası için const x = 1; içeriğini kullan. Bir CompilerHost tanımla; getSourceFile yöntemi bu dosya için ts.createSourceFile ile SourceFile döndürsün. noLib: true seçeneğiyle ts.createProgram oluştur ve kaynak dosyalarının adlarını yazdır.

Başlangıç kodu

index.ts
import * as ts from "typescript";

// Bellekten kaynak için bir CompilerHost tanımla
// getSourceFile, dosya adı app.ts ise SourceFile döndürsün
// noLib: true ile program oluştur
// Tüm kaynak dosyaların adlarını yazdır

// kodunu buraya yaz

Örnek çözüm

index.ts
import ts from "typescript";

const fileName = "app.ts";
const sourceText = "const x = 1;";

const host: ts.CompilerHost = {
  fileExists: (name) => name === fileName,
  readFile: (name) => (name === fileName ? sourceText : undefined),
  getSourceFile: (name, lang) =>
    name === fileName ? ts.createSourceFile(name, sourceText, lang, true) : undefined,
  writeFile: () => {},
  getDefaultLibFileName: () => "lib.d.ts",
  useCaseSensitiveFileNames: () => true,
  getCanonicalFileName: (n) => n,
  getCurrentDirectory: () => "",
  getNewLine: () => "\n",
};

const program = ts.createProgram([fileName], { noLib: true }, host);
for (const sf of program.getSourceFiles()) {
  console.log(sf.fileName);
}

Beklenen çıktı

app.ts

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Program nesnesinin getSourceFiles() yöntemi ne döndürür?

  • Symbol[] sembolleri
  • SourceFile[] dizisi Doğru cevap
  • string[] dosya adları
  • Type[] türleri

Açıklama: getSourceFiles() derlemedeki tüm kaynak dosyaları SourceFile düğümleri olarak döndürür; dosya adlarını veya türleri değil.

2 Ad ile kaynak dosya

Soru
const program = ts.createProgram(["app.ts"], {}, host);
const sf = program.getSourceFile("app.ts");
console.log(sf?.____);
Cevap
const program = ts.createProgram(["app.ts"], {}, host);
const sf = program.getSourceFile("app.ts");
console.log(sf?.fileName);

Açıklama: SourceFile.fileName dosyanın adını taşır; getSourceFile ad ile arama yapar ve SourceFile döndürür.

3 createProgram parçaları

Kavram Anlamı
ts.createProgram Derleme nesnesi oluşturur
getSourceFiles() Tüm kaynak dosyaları döndürür
getSourceFile(name) Belirli bir dosyayı döndürür
CompilerHost Dosya okumayı özelleştirir

Uzman bölümündeki tüm dersler