ts-compiler有一个解析文件内容生成checker的函数:
const program = ts.createProgram([fileName], {})
const checker = program.getTypeChecker();
我想问的是:createProgram
能够对当前文件中的代码段处理吗?或者说对当前文件中的代码段有没有和getTypeChecker
一样功能的函数?
就像这样:
const tsCode = `import { app } from 'framework';
const dataLen = 3;
let name = 'iceman';
if(app){
console.log(name);
}
function getInfos (info: string) {
const result = app.get(info);
return result;
}`;
获取ast的函数就可以这样:tsCompiler.createSourceFile('xxx', tsCode, ts.ScriptTarget.Latest, true);
,但是我没找到createProgram
函数类似的写法。
求带佬们解答!
参考GPT和自己的思路:
createProgram
函数实际上是针对整个项目的,可以对指定的文件列表进行编译操作,而非单独的文件代码段。
如果需要对单独的代码段进行解析,可以使用createSourceFile
函数创建一个源文件AST节点。例如:
const sourceFile = ts.createSourceFile('example.ts', tsCode, ts.ScriptTarget.Latest, true);
这样就可以获得这段代码的AST节点,然后可以使用getTypeChecker
等函数进行操作和解析。
参考GPT和自己的思路:
对于当前文件中的代码段,可以使用ts.createSourceFile创建一个ts源文件,并通过创建程序的方式来解析该文件。因此,可以使用以下代码来创建一个程序并获取类型检查器:
const tsCode = `import { app } from 'framework';
const dataLen = 3;
let name = 'iceman';
if(app){
console.log(name);
}
function getInfos (info: string) {
const result = app.get(info);
return result;
}`;
const sourceFile = ts.createSourceFile('inMemory.ts', tsCode, ts.ScriptTarget.Latest, false);
const program = ts.createProgram(['inMemory.ts'], {});
const checker = program.getTypeChecker();
在这个例子中,我们创建了一个名为"inMemory.ts"的虚拟文件,然后向createProgram函数传递一个包含该文件的数组。最后,我们从程序中获取类型检查器。
createProgram看看这个函数的定义