我正在尝试在Compiler API之后构建代码分析工具。
现在,以下应用可以打印出p
,Person
,age
,walk
。
但是如何知道Person
是接口,walk
是函数等?感谢
// app.ts
import * as ts from 'typescript';
const userAppFile = './user-app.ts';
const apiFile = './api.d.ts';
const program = ts.createProgram([userAppFile, apiFile], ts.getDefaultCompilerOptions());
const checker = program.getTypeChecker();
const sourceFile = program.getSourceFile(userAppFile);
function printApi(node) {
const symbol = checker.getSymbolAtLocation(node);
if (symbol) console.log(symbol.name);
ts.forEachChild(node, printApi);
}
printApi(sourceFile);
// api.d.ts
interface Person {
age: number;
}
declare function walk(speed: number): void;
// user-app.ts
const p: Person = { age: 10 };
walk(3);
答案 0 :(得分:1)
检查符号上的标记。
即:
if(symbol.flags & ts.SymbolFlags.Class) {
// this symbol is a class
} else if (symbol.flags & ts.SymbolFlags.Interface) {
// this is an interface
}