0Pricing
TypeScript Academy · レッスン

APIによるTypeScriptプログラムの作成

コンパイラプログラムを初期化し、型チェッカーにアクセスします。

「APIによるTypeScriptプログラムの作成」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

Compiler API とは

TypeScript は、typescript npm パッケージを通じてコンパイラーの内部機能を公開しています。プログラムを作成したり、型チェッカーを調べたり、ソースファイルをプログラムから解析したりできます。

import ts from "typescript";
// Use ts.createProgram to start

typescript パッケージのインストール

ツールで Compiler API を使用する場合は、TypeScript を通常の依存関係としてインストールしてください。devDependency だけにするのは避けます。

npm install typescript
# Also install types if needed
npm install --save-dev @types/node

Program の作成

ts.createProgramはエントリーファイルのパスの配列とコンパイラーオプションを受け取り、Programオブジェクトを返します。

import ts from "typescript";
const program = ts.createProgram(["src/index.ts"], {
  target: ts.ScriptTarget.ES2020,
  module: ts.ModuleKind.CommonJS,
  strict: true,
});

ソースファイルへのアクセス

program.getSourceFiles()を使うとコンパイル対象のすべてのファイルを取得でき、getSourceFileを使うと特定のパスのファイルを取得できます。

const sourceFiles = program.getSourceFiles();
sourceFiles.forEach(sf => {
  if (!sf.isDeclarationFile) {
    console.log(sf.fileName);
  }
});

型チェッカーの取得

型チェッカーは TypeScript の解析の中核です。program.getTypeChecker()で取得できます。

const checker = program.getTypeChecker();
// Now use checker to resolve types, symbols, etc.

診断情報の読み取り

コンパイラーの診断情報(エラーと警告)を取得して、カスタム検証ツールを実装できます。

const diagnostics = ts.getPreEmitDiagnostics(program);
diagnostics.forEach(d => {
  const msg = ts.flattenDiagnosticMessageText(d.messageText, "
");
  console.log(msg);
});

tsconfig.json の読み取り

ts.readConfigFileとts.parseJsonConfigFileContentを使うと、tsconfig ファイルからコンパイラーオプションを読み込めます。

const cfgFile = ts.readConfigFile("tsconfig.json", ts.sys.readFile);
const parsed = ts.parseJsonConfigFileContent(
  cfgFile.config,
  ts.sys,
  process.cwd()
);
const program2 = ts.createProgram(parsed.fileNames, parsed.options);

シンボル解決

型チェッカーは、宣言を参照する名前であるシンボルを解決し、指定した識別子が何を指しているかを調べられます。

const sf = program.getSourceFile("src/index.ts")!;
ts.forEachChild(sf, node => {
  if (ts.isVariableStatement(node)) {
    const symbol = checker.getSymbolAtLocation(
      node.declarationList.declarations[0].name
    );
    console.log(symbol?.getName());
  }
});

出力の生成

program.emit()を呼び出すと、tscを実行した場合と同じように、JavaScript ファイルと宣言ファイルを生成できます。

const emitResult = program.emit();
const exitCode = emitResult.emitSkipped ? 1 : 0;
process.exit(exitCode);

インクリメンタルプログラム

ts.createIncrementalProgramを使うと、以前のビルド状態を再利用して、繰り返し行う解析を高速化できます。

// Incremental compilation tracks which files changed
// to avoid reprocessing unchanged files

復習: Compiler API の基本

TypeScript Compiler API を使うと、Node.js のコードだけでプログラムを作成し、ソースファイルを調べ、型チェッカーで型を問い合わせ、JavaScript を生成できます。

確認問題

プログラムから TypeScript の型チェッカーを返すメソッドはどれですか。

学んだこと

TypeScript Compiler API はts.createProgramから始まります。Program からソースファイル、型チェッカー、診断情報にアクセスし、出力を生成できます。これはリンター、コードジェネレーター、解析ツールを構築するための基盤です。

よくある質問

「APIによるTypeScriptプログラムの作成」レッスンは無料ですか?

はい。「APIによるTypeScriptプログラムの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「APIによるTypeScriptプログラムの作成」で何を学びますか?

コンパイラプログラムを初期化し、型チェッカーにアクセスします。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「APIによるTypeScriptプログラムの作成」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. APIによるTypeScriptプログラムの作成
  2. VisitorによるASTの走査
  3. カスタムTransformerとコード生成
  4. 簡単なLintツールの構築
← TypeScript Academyに戻る