TypeScript compiler API basics - Mini Project: Build & Apply
sourceCode and set it to the string containing these exact lines of TypeScript code with line breaks:function greet() { console.log('Hello'); }function add(a: number, b: number) { return a + b; }Use backticks ` to create a multi-line string in TypeScript.
ts from 'typescript' and create a variable called sourceFile by calling ts.createSourceFile with these exact arguments:-
'temp.ts' as fileName-
sourceCode as sourceText-
ts.ScriptTarget.Latest as languageVersion-
true as setParentNodesUse ts.createSourceFile to parse the code string into a source file object.
findFunctionNames that takes node of type ts.Node and an array names of strings. Inside it, use ts.forEachChild to visit each child node. If a child node is a function declaration (ts.isFunctionDeclaration(child)) and has a name, push the name text to names. Recursively call findFunctionNames on each child node.Use recursion and ts.forEachChild to visit all nodes and collect function names.
functionNames. Call findFunctionNames with sourceFile and functionNames. Then print functionNames using console.log.Remember to call the function and then print the array.
Practice
What is the primary purpose of the TypeScript compiler API?
SourceFile is a key part of it. What does it help you do?
Solution
Step 1: Understand the role of the compiler API
The TypeScript compiler API is designed to let programs read and change TypeScript code, not to run it or build UI.Step 2: Identify what
SourceFilerepresentsSourceFileis an object representing the code text, allowing exploration and modification.Final Answer:
Read and modify TypeScript code programmatically -> Option BQuick Check:
Compiler API = Code reading and modification [OK]
- Thinking it runs TypeScript code directly
- Confusing it with UI libraries
- Assuming it manually converts code without automation
Which of the following is the correct way to create a SourceFile using the TypeScript compiler API?
const sourceFile = ts.createSourceFile(____);
Solution
Step 1: Recall the
The method requires filename, source text, and script target in that order.createSourceFilesignatureStep 2: Match the correct argument order
('file.ts', codeText, ts.ScriptTarget.Latest) correctly uses ('file.ts', codeText, ts.ScriptTarget.Latest).Final Answer:
('file.ts', codeText, ts.ScriptTarget.Latest) -> Option DQuick Check:
Filename, text, target order = A [OK]
- Swapping filename and code text
- Omitting the script target argument
- Passing arguments in wrong order
Given this code snippet using the TypeScript compiler API:
const sourceFile = ts.createSourceFile('test.ts', 'let x = 5;', ts.ScriptTarget.Latest);
const firstStatement = sourceFile.statements[0];
console.log(firstStatement.kind);What will be printed?
Solution
Step 1: Understand what
The first statement issourceFile.statements[0]islet x = 5;, which is a variable declaration statement.Step 2: Identify the kind of this statement
Its kind isSyntaxKind.VariableStatement, a numeric enum value representing variable statements.Final Answer:
SyntaxKind.VariableStatement -> Option AQuick Check:
First statement kind = VariableStatement [OK]
- Expecting the value 5 to be printed
- Confusing statement kind with identifier kind
- Assuming undefined because of missing imports
Consider this code snippet:
const sourceFile = ts.createSourceFile('file.ts', 'const a = 10;', ts.ScriptTarget.Latest);
const firstStatement = sourceFile.statements[0];
console.log(firstStatement.name.text);What is the error in this code?
Solution
Step 1: Check the type of
firstStatementfirstStatementis a VariableStatement node, which does not have a directnameproperty.Step 2: Understand how to access variable name
The variable name is insidefirstStatement.declarationList.declarations[0].name, not directly onfirstStatement.Final Answer:
firstStatementhas no propertyname-> Option AQuick Check:
VariableStatement lacks direct name property [OK]
- Accessing name directly on VariableStatement
- Assuming sourceFile creation is wrong
- Confusing property names on nodes
You want to write a function using the TypeScript compiler API that extracts all variable names from a given source code string. Which approach is best?
- Create a
SourceFilefrom the code string. - Traverse its statements and declarations.
- Collect names from variable declarations.
Which code snippet correctly starts this process?
function getVariableNames(code: string): string[] {
const sourceFile = ts.createSourceFile('temp.ts', code, ts.ScriptTarget.Latest);
const names: string[] = [];
sourceFile.statements.forEach(statement => {
if (ts.isVariableStatement(statement)) {
statement.declarationList.declarations.forEach(decl => {
if (ts.isIdentifier(decl.name)) {
names.push(decl.name.text);
}
});
}
});
return names;
}Solution
Step 1: Verify SourceFile creation
The code correctly creates aSourceFilefrom the input string.Step 2: Check traversal and extraction logic
It loops over statements, filters variable statements, then loops declarations to extract identifier names properly.Final Answer:
Correctly traverses variable declarations and extracts names -> Option CQuick Check:
Traversal and extraction logic is correct [OK]
- Not creating SourceFile before traversal
- Trying to loop on non-iterable objects
- Pushing nodes instead of text names
Ready to prove it?
Pass the test and this pattern moves unknown
