API biên dịch TypeScript sử dụng nâng cao và ví dụ

API biên dịch TypeScript cung cấp các công cụ mạnh mẽ để tương tác theo chương trình với mã TypeScript. Nó cho phép các nhà phát triển phân tích, chuyển đổi và tạo mã TypeScript theo những cách tinh vi. Bài viết này đi sâu vào các tình huống sử dụng nâng cao và các ví dụ để minh họa khả năng của API biên dịch TypeScript.

Bắt đầu với API biên dịch TypeScript

Trước khi tìm hiểu cách sử dụng nâng cao, điều cần thiết là phải thiết lập TypeScript Compiler API. Điều này bao gồm cài đặt TypeScript và viết một tập lệnh cơ bản để tương tác với API.

import * as ts from 'typescript';

const sourceCode = `let x: number = 1;`;
const sourceFile = ts.createSourceFile('example.ts', sourceCode, ts.ScriptTarget.ES2015);

console.log(sourceFile.text);

Phân tích mã TypeScript

API biên dịch cho phép phân tích cú pháp mã TypeScript thành cây cú pháp trừu tượng (AST). Điều này có thể hữu ích cho các tác vụ phân tích và chuyển đổi mã.

const sourceFile = ts.createSourceFile('example.ts', sourceCode, ts.ScriptTarget.ES2015);

function visit(node: ts.Node) {
  if (ts.isVariableDeclaration(node)) {
    console.log(`Variable name: ${node.name.getText()}`);
  }
  ts.forEachChild(node, visit);
}

visit(sourceFile);

Chuyển đổi mã TypeScript

API cung cấp các công cụ để chuyển đổi mã TypeScript. Ví dụ này cho thấy cách sử dụng trình chuyển đổi để sửa đổi mã.

function transformer<T extends ts.Node>(context: ts.TransformationContext) {
  function visit(node: T): T {
    if (ts.isVariableDeclaration(node)) {
      return ts.updateVariableDeclaration(node, node.name, node.type, ts.createLiteral(42)) as T;
    }
    return ts.visitEachChild(node, visit, context);
  }
  return (rootNode: T) => ts.visitNode(rootNode, visit);
}

const result = ts.transform(sourceFile, [transformer]);
const printer = ts.createPrinter();
const transformedCode = printer.printFile(result.transformed[0] as ts.SourceFile);

console.log(transformedCode);

Tạo Mã TypeScript

Tạo mã TypeScript theo chương trình là một tính năng mạnh mẽ khác của API. Sau đây là ví dụ về cách tạo tệp TypeScript mới từ đầu.

const newSourceFile = ts.createSourceFile(
  'newFile.ts',
  `const greeting: string = 'Hello, TypeScript!';`,
  ts.ScriptTarget.ES2015
);

const printer = ts.createPrinter();
const newCode = printer.printFile(newSourceFile);

console.log(newCode);

Xử lý chẩn đoán và lỗi

API biên dịch cung cấp các cơ chế để xử lý chẩn đoán và lỗi. Ví dụ này trình bày cách sử dụng chẩn đoán để báo cáo sự cố trong mã TypeScript.

const program = ts.createProgram(['example.ts'], {});
const diagnostics = ts.getPreEmitDiagnostics(program);

diagnostics.forEach(diagnostic => {
  const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
  console.log(`Error: ${message}`);
});

Phần kết luận

API biên dịch TypeScript cung cấp một bộ tính năng phong phú để làm việc với mã TypeScript theo chương trình. Bằng cách thành thạo các khả năng nâng cao này, các nhà phát triển có thể tạo ra các công cụ mạnh mẽ để phân tích, chuyển đổi và tạo mã TypeScript, dẫn đến quy trình phát triển hiệu quả và linh hoạt hơn.