【发布时间】:2017-01-28 01:03:51
【问题描述】:
我想把我的typescript定义解析成json,比如
namespace call.common {
namespace login {
interface Request {
userName: string;
password: string;
}
interface Response {
isLogin: boolean
}
}
}
json 可能是这样的:
{
namespace: "call.common.login",
interfaces: [
{
"name": "Request",
params: [{
name: "userName",
type: "string",
}, {
name: "password",
type: "string"
}]
}, {
"name": "Response",
params: [{
name: "isLogin",
type: boolean
}]
}
]
}
根据文档Using-the-Compiler-API我正在尝试使用编译器:
function parseGrpcTypings(fileName, options) {
var program = ts.createProgram(fileName, options);
var checker = program.getTypeChecker();
const sourceFile = program.getSourceFiles()[0];
ts.forEachChild(sourceFile, visit);
function visit(node) {
if (!isNodeExported(node)) {
return;
}
if (node.kind === ts.SyntaxKind.ModuleDeclaration) {
ts.forEachChild(node, visit);
} else if (node.kind === ts.SyntaxKind.InterfaceDeclaration) {
// how to parse interface
} else {
// how to deal with namespace
}
}
function isNodeExported(node) {
return (node.flags & ts.NodeFlags.Export) !== 0 || (node.parent && node.parent.kind === ts.SyntaxKind.SourceFile);
}
}
parseGrpcTypings("/tmp/test.d.ts", {
target: ts.ScriptTarget.ES5, module: ts.ModuleKind.CommonJS
});
【问题讨论】:
-
你希望这个 json 看起来像什么?你想如何解析它?更多信息可能会有用...
-
@NitzanTomer 类似于我发布的内容,但这是一个非常简单的示例
标签: json typescript