2013-12-20 4 views
3

Я бы хотел просмотреть мои файлы .ts во время выполнения и получить информацию о том, какие классы находятся в файле, какие функции он имеет, какие свойства и являются ли они общедоступными или частными.Typcript эквивалентно описанию actionscript3

В actionscript3 я использовал для этого описание "descriptionType", которое возвращало эту информацию в XML. Кто-нибудь знает способ получить эту информацию в машинописном тексте?

Есть ли инструменты, которые могут анализировать jsdoc любого типа файла и возвращать информацию об этом?

ответ

2

Поскольку вы хотите обрабатывать файлы, я не понимаю, требование «во время выполнения».

Кроме того, если вы просто хотите проанализировать 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 
    } 
} 
] 
+0

, который идеально подходит для того, что я хочу! Спасибо. Любая возможность сделать это в браузере без узла? – Flion

+1

@FlyOn да, обработка файловой системы по модулю в браузерах. Команда TS предоставляет TypeScriptServices.ts в своем реплике codeplex (git), который является основой для их игровой площадки, моего сервера командной строки, нескольких повторных реализаций с открытым исходным кодом на их игровой площадке (тот, который, как я помню, теперь превратился в IDE , хотя), и их набор тестов. Вряд ли какие-либо документы, но некоторые примеры клиентских источников для просмотра. Вкратце, вы загружаете свои службы (JS), создаете экземпляр языковой службы, добавляете исходные файлы и вызываете подпрограммы API. – claus

+0

Это именно то, что я буду делать в ближайшее время. Благодарим вас за подробное объяснение. – Flion

1

Существует нет API-интерфейсов для описания типов, но вы можете использовать API-интерфейсы ES3!
Вы должны взглянуть на эти функции:

+0

да они являются хорошим началом, но они не дадут мне параметры, общедоступный/частный, модуль, информация о расширении класса и т. д. Поэтому я также буду смотреть на TypeScriptServices. – Flion

Смежные вопросы