使用Typescript编译器分析javascript文件
请参阅:,我想获取AST中节点的类型 它对于使用Typescript编译器分析javascript文件,javascript,typescript,typescript-compiler-api,Javascript,Typescript,Typescript Compiler Api,请参阅:,我想获取AST中节点的类型 它对于angular项目是成功的,因为它是使用typescript编写的,并且存在tsconfig.json 当我尝试分析使用javascript编写的react app时 const program = ts.createProgram({ rootNames: [fileName], options: { strict: true, target: ts.ScriptTarget.ES2015,
angular
项目是成功的,因为它是使用typescript编写的,并且存在tsconfig.json
当我尝试分析使用javascript编写的react app
时
const program = ts.createProgram({
rootNames: [fileName],
options: {
strict: true,
target: ts.ScriptTarget.ES2015,
allowJs: true,
checkJs: true
}
})
const typeChecker = program.getTypeChecker();
... ...
我得到:typechecker.getTypeAtLocation(节点).getSymbol()是未定义的
我假设ts.createProgram
的options
是错误的 选项:moduleResolution:ts.ModuleResolutionKind.NodeJs
是关键
const program = ts.createProgram({
rootNames: [file1],
options: {
strict: true,
target: ts.ScriptTarget.ES2015,
allowJs: true,
checkJs: true,
moduleResolution: ts.ModuleResolutionKind.NodeJs
}
})
以上内容适用于React JS。我认为typeChecker.getTypeAtLocation(node)
可能返回了错误类型。ts.getPreEmitDiagnostics(program)
是否返回任何诊断?对于某些背景,此解决方案取决于场景,发生这种情况的原因是,当针对ES2015或更高版本时,默认模块分辨率将从NodeJs
更改为Classic
。因此,这并不是因为正在分析一个JS文件,而您可能得到的是unknown
类型。在我的回答中读更多。