如何使用 Typescript 语言服务获取 属性 信息
How to get property info by using the Typescript language service
如何使用 Typescript 1.4.0 获取对象的 属性 类型。
我正在寻找类似于 C# 的东西,它可以查找对象的属性。
var properties = typeof(T).GetProperties();
foreach( var property in properties){}
我目前拥有的是:
var ls = ts.createLanguageService(host, ts.createDocumentRegistry())
var nav = ls.getNavigationBarItems(host.fileName);
给出示例接口:
interface Example {
firstname: string;
lastname: string;
age: string;
}
TypeScript 语言服务returns结果:
{
"NavigationBarItems":[
{
"text":"Example",
"kind":"interface",
"kindModifiers":"",
"spans":[
{
"start":0,
"length":83
}
],
"childItems":[
{
"text":"age",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":69,
"length":12
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
},
{
"text":"firstname",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":24,
"length":18
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
},
{
"text":"lastname",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":47,
"length":17
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
}
],
"indent":0,
"bolded":false,
"grayed":false
}
]
}
我缺少的信息是类型(字符串、数字、Map<>、任意)以及它是数组还是对象,例如
"text":"lastname",
"kind":"property",
"type":"string", //string,number,Map<>,any
知道如何实现吗?
非常感谢您的帮助。
找到了解决方案,不知道我一开始是怎么错过的。 Nicholas Wolverson 有一篇关于它的精彩博客 post。使用 TypeScript 语言服务并不是正确的选择。正确的解决方案是使用 TypeScript 编译器 API.
var program = ts.createProgram([dummyScriptName], host.getCompilationSettings(), host);
var typeChecker = program.getTypeChecker();
var sf = program.getSourceFile(dummyScriptName);
var decls = sf.getNamedDeclarations().map(function (nd) { return nd.symbol.name + ": " + typeChecker.typeToString(typeChecker.getTypeAtLocation(nd)); });
这将return需要的信息
interface Person {
firstname: string;
lastname: string;
age: number[];
}
结果:
Person: Person
firstname: string
lastname: string
age: number[]
详情请使用(code, mirror_code, blog post)。
如何使用 Typescript 1.4.0 获取对象的 属性 类型。
我正在寻找类似于 C# 的东西,它可以查找对象的属性。
var properties = typeof(T).GetProperties();
foreach( var property in properties){}
我目前拥有的是:
var ls = ts.createLanguageService(host, ts.createDocumentRegistry())
var nav = ls.getNavigationBarItems(host.fileName);
给出示例接口:
interface Example {
firstname: string;
lastname: string;
age: string;
}
TypeScript 语言服务returns结果:
{
"NavigationBarItems":[
{
"text":"Example",
"kind":"interface",
"kindModifiers":"",
"spans":[
{
"start":0,
"length":83
}
],
"childItems":[
{
"text":"age",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":69,
"length":12
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
},
{
"text":"firstname",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":24,
"length":18
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
},
{
"text":"lastname",
"kind":"property",
"kindModifiers":"",
"spans":[
{
"start":47,
"length":17
}
],
"childItems":[
],
"indent":0,
"bolded":false,
"grayed":false
}
],
"indent":0,
"bolded":false,
"grayed":false
}
]
}
我缺少的信息是类型(字符串、数字、Map<>、任意)以及它是数组还是对象,例如
"text":"lastname",
"kind":"property",
"type":"string", //string,number,Map<>,any
知道如何实现吗?
非常感谢您的帮助。
找到了解决方案,不知道我一开始是怎么错过的。 Nicholas Wolverson 有一篇关于它的精彩博客 post。使用 TypeScript 语言服务并不是正确的选择。正确的解决方案是使用 TypeScript 编译器 API.
var program = ts.createProgram([dummyScriptName], host.getCompilationSettings(), host);
var typeChecker = program.getTypeChecker();
var sf = program.getSourceFile(dummyScriptName);
var decls = sf.getNamedDeclarations().map(function (nd) { return nd.symbol.name + ": " + typeChecker.typeToString(typeChecker.getTypeAtLocation(nd)); });
这将return需要的信息
interface Person {
firstname: string;
lastname: string;
age: number[];
}
结果:
Person: Person
firstname: string
lastname: string
age: number[]
详情请使用(code, mirror_code, blog post)。