Как преобразовать объектный литерал AST файла TypeScript в Actual Code? - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно преобразовать файл JSON или Object Literal в реальный код. Как это сделать?

const astInJson = {"pos":0,"end":79,"flags":0,"kind":268,"text":"export interface Order {\n\torderId: string;\n\titineraries(id: string): string;\n}\n","bindDiagnostics":[],"languageVersion":5,"fileName":"/Users/myth/Desktop/test-interface.ts","languageVariant":0,"isDeclarationFile":false,"scriptKind":3,"referencedFiles":[],"typeReferenceDirectives":[],"amdDependencies":[],"statements":[{"pos":0,"end":78,"flags":0,"kind":230,"modifiers":[{"pos":0,"end":6,"flags":0,"kind":84}],"name":{"pos":16,"end":22,"flags":0,"escapedText":"Order"},"members":[{"pos":24,"end":42,"flags":0,"kind":148,"name":{"pos":24,"end":33,"flags":0,"escapedText":"orderId"},"type":{"pos":34,"end":41,"flags":0,"kind":136}},{"pos":42,"end":76,"flags":0,"kind":150,"name":{"pos":42,"end":55,"flags":0,"escapedText":"itineraries"},"parameters":[{"pos":56,"end":66,"flags":0,"kind":146,"name":{"pos":56,"end":58,"flags":0,"escapedText":"id"},"type":{"pos":59,"end":66,"flags":0,"kind":136}}],"type":{"pos":68,"end":75,"flags":0,"kind":136}}],"modifierFlagsCache":536870913}],"endOfFileToken":{"pos":78,"end":79,"flags":0,"kind":1},"externalModuleIndicator":{"pos":0,"end":78,"flags":0,"kind":230,"modifiers":[{"pos":0,"end":6,"flags":0,"kind":84}],"name":{"pos":16,"end":22,"flags":0,"escapedText":"Order"},"members":[{"pos":24,"end":42,"flags":0,"kind":148,"name":{"pos":24,"end":33,"flags":0,"escapedText":"orderId"},"type":{"pos":34,"end":41,"flags":0,"kind":136}},{"pos":42,"end":76,"flags":0,"kind":150,"name":{"pos":42,"end":55,"flags":0,"escapedText":"itineraries"},"parameters":[{"pos":56,"end":66,"flags":0,"kind":146,"name":{"pos":56,"end":58,"flags":0,"escapedText":"id"},"type":{"pos":59,"end":66,"flags":0,"kind":136}}],"type":{"pos":68,"end":75,"flags":0,"kind":136}}],"modifierFlagsCache":536870913},"nodeCount":15,"identifierCount":5,"identifiers":{},"parseDiagnostics":[]}

1 Ответ

0 голосов
/ 31 августа 2018

Если у вас есть ts.SourceFile объект, вы можете использовать:

ts.createPrinter().printFile(file)

, который возвращает строку. ts.SourceFile - это структура данных, которая содержит циклические ссылки; если у вас есть некоторое подмножество полей как JSON, я не знаю, есть ли какой-нибудь разумный способ преобразовать это обратно в ts.SourceFile. Для большего количества идей, вы могли бы взглянуть на API для изменения и печати AST, который используется в собственных исправлениях кода TypeScript .

...