使用Typescript编译器分析javascript文件

使用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,

请参阅:,我想获取AST中节点的类型

它对于
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
类型。在我的回答中读更多。