给定此输入文件:
function foo (s: string) {
console.log(s)
}
我想通过编程来确定console.log(s)
中s
的类型。换句话说,我想使用VSCode使用的任何机制来告诉我,当我将鼠标悬停在s
上时,它是一个字符串。
这是我最接近的一次了
const ts = require("typescript");
const sourceCode = `
function (s: string) {
console.log(s)
}
`;
const sourceFile = ts.createSourceFile(
"test.ts",
sourceCode,
ts.ScriptTarget.Latest
);
const functionDeclaration = sourceFile.statements[0];
const identifier =
functionDeclaration.body.statements[0].expression.arguments[0]; // the s in console.log(s)
const typeChecker = ts.createTypeChecker(ts.createProgram(["test.ts"], {}));
const type = typeChecker.getTypeOfSymbolAtLocation(identifier);
console.log(typeChecker.typeToString(type));
我希望输出是“string”,但实际上输出是“any”。
1条答案
按热度按时间m3eecexj1#
我不确定如何让问题中的示例代码工作,但我确实找到了我需要的答案。
给定一个类型节点,我可以调用
getFlags()
,它返回一个位图。然后我可以根据typescript.TypeFlags.Undefined
屏蔽该位图,以确定它是否是undefined
类型。如果它是一个联合类型,我需要对
typeNode.types
中的每个类型进行检查。重要的代码最终看起来像这样:
这不适用于问题中的示例代码,但它在我需要的地方工作,在ESLint规则中。