TypeScript 컴파일러 API 고급 사용법 및 예제
TypeScript Compiler API는 TypeScript 코드와 프로그래밍적으로 상호 작용하기 위한 강력한 도구를 제공합니다. 개발자는 이를 통해 정교한 방식으로 TypeScript 코드를 분석, 변환 및 생성할 수 있습니다. 이 문서에서는 TypeScript Compiler API의 기능을 설명하기 위해 고급 사용 시나리오와 예를 살펴봅니다.
TypeScript 컴파일러 API 시작하기
고급 사용법에 들어가기 전에 TypeScript Compiler API를 설정하는 것이 필수적입니다. 여기에는 TypeScript를 설치하고 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);
TypeScript 코드 구문 분석
컴파일러 API는 TypeScript 코드를 추상 구문 트리(AST)로 구문 분석할 수 있도록 합니다. 이는 코드 분석 및 변환 작업에 유용할 수 있습니다.
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);
TypeScript 코드 변환
API는 TypeScript 코드를 변환하기 위한 도구를 제공합니다. 이 예제는 변환기를 사용하여 코드를 수정하는 방법을 보여줍니다.
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);
TypeScript 코드 생성
TypeScript 코드를 프로그래밍 방식으로 생성하는 것은 API의 또 다른 강력한 기능입니다. 다음은 처음부터 새 TypeScript 파일을 만드는 방법의 예입니다.
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);
진단 및 오류 처리
컴파일러 API는 진단 및 오류를 처리하기 위한 메커니즘을 제공합니다. 이 예제는 진단을 사용하여 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}`);
});
결론
TypeScript Compiler API는 TypeScript 코드를 프로그래밍 방식으로 작업하기 위한 풍부한 기능 세트를 제공합니다. 이러한 고급 기능을 숙달함으로써 개발자는 TypeScript 코드를 분석, 변환 및 생성하기 위한 강력한 도구를 만들어 더 효율적이고 유연한 개발 워크플로를 구축할 수 있습니다.