Поскольку вы хотите обрабатывать файлы, я не понимаю, требование «во время выполнения».
Кроме того, если вы просто хотите проанализировать TS-код с помощью TS, вы можете использовать службы языка TypeScript, которые имеют все API-интерфейсы, необходимые для поддержки IDE TypeScript, написанных на языке TypeScript. В этом конкретном примере languageService.getScriptLexicalStructure(file)
должен сделать трюк.
Если вы хотите сделать это из командной строки, или вы хотите увидеть пример использования языковых услуг, вы можете попробовать https://github.com/clausreinke/typescript-tools
$ cat reflection.ts
module foo{
export class A{
public x1:number = 10;
public x2 = 20;
public s1: string = "";
constructor(public x = true) {}
}
}
function listProperties(o, isClass?) {
var props = [];
console.log("name:",o["name"]);
var tmp = isClass ? new o : o;
for (var p in tmp)
console.log(p,typeof tmp[p]);
}
listProperties(foo.A,true);
$ node typescript-tools/bin/tss.js reflection.ts
"loaded c:/javascript/typescript/reflection.ts, TSS listening.."
prettyJSON true
"pretty JSON: true"
> structure reflection.ts
[
{
"loc": {
"name": "foo",
"kind": "module",
"kindModifiers": "",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 0,
"limChar": 183,
"containerName": "",
"containerKind": ""
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 1,
"character": 1
},
"lim": {
"line": 9,
"character": 2
}
},
{
"loc": {
"name": "A",
"kind": "class",
"kindModifiers": "export",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 17,
"limChar": 180,
"containerName": "foo",
"containerKind": "module"
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 2,
"character": 5
},
"lim": {
"line": 8,
"character": 6
}
},
{
"loc": {
"name": "x1",
"kind": "property",
"kindModifiers": "public",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 49,
"limChar": 63,
"containerName": "foo.A",
"containerKind": "class"
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 3,
"character": 16
},
"lim": {
"line": 3,
"character": 30
}
},
{
"loc": {
"name": "x2",
"kind": "property",
"kindModifiers": "public",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 81,
"limChar": 88,
"containerName": "foo.A",
"containerKind": "class"
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 4,
"character": 16
},
"lim": {
"line": 4,
"character": 23
}
},
{
"loc": {
"name": "s1",
"kind": "property",
"kindModifiers": "public",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 116,
"limChar": 131,
"containerName": "foo.A",
"containerKind": "class"
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 6,
"character": 16
},
"lim": {
"line": 6,
"character": 31
}
},
{
"loc": {
"name": "constructor",
"kind": "constructor",
"kindModifiers": "",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 142,
"limChar": 173,
"containerName": "foo.A",
"containerKind": "class"
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 7,
"character": 9
},
"lim": {
"line": 7,
"character": 40
}
},
{
"loc": {
"name": "listProperties",
"kind": "function",
"kindModifiers": "",
"matchKind": "exact",
"fileName": "c:/javascript/typescript/reflection.ts",
"minChar": 187,
"limChar": 368,
"containerName": "",
"containerKind": ""
},
"file": "c:/javascript/typescript/reflection.ts",
"min": {
"line": 11,
"character": 1
},
"lim": {
"line": 17,
"character": 2
}
}
]
, который идеально подходит для того, что я хочу! Спасибо. Любая возможность сделать это в браузере без узла? – Flion
@FlyOn да, обработка файловой системы по модулю в браузерах. Команда TS предоставляет TypeScriptServices.ts в своем реплике codeplex (git), который является основой для их игровой площадки, моего сервера командной строки, нескольких повторных реализаций с открытым исходным кодом на их игровой площадке (тот, который, как я помню, теперь превратился в IDE , хотя), и их набор тестов. Вряд ли какие-либо документы, но некоторые примеры клиентских источников для просмотра. Вкратце, вы загружаете свои службы (JS), создаете экземпляр языковой службы, добавляете исходные файлы и вызываете подпрограммы API. – claus
Это именно то, что я буду делать в ближайшее время. Благодарим вас за подробное объяснение. – Flion