我正在尝试为Aurelia编写一个VS Code扩展,它将在HTML文件中为其配对的viewmodel typescript类中的属性和方法提供intellisense。
我可以访问typescript文件,但我需要一个工具来分析以提取viewmodel类的属性。以下是此类的示例:
import { HttpClient } from 'aurelia-fetch-client';
import { observable, inject } from 'aurelia-framework';
@inject(HttpClient)
export class People {
public people: Person[];
@observable selectedPerson: Person;
private httpClient: HttpClient
public updateMessage: string;
constructor(http: HttpClient) {
this.httpClient = http;
this.httpClient.fetch('http://localhost:5555/api/Persons?$top=10')
.then(result => result.json() as Promise<ODataPerson>)
.then(data => {
this.people = data.value;
});
}
setSelected(selected: Person) {
this.selectedPerson = selected;
}
activate() {
...
}
}
所以我想从中提取一系列属性,即people,selectedPerson和updateMessage,以及可能的任何公共方法,即setSelected。
执行此操作的最佳方法是使用Require消耗类,然后使用javascript反射,例如。
var Reflector = function(obj) {
this.getProperties = function() {
var properties = [];
for (var prop in obj) {
if (typeof obj[prop] != 'function') {
properties.push(prop);
}
}
return properties;
};
但要做到这一点,我必须将ts文件编译成Javascript,然后我仍然无法使用它,因为要导入和注入像HttpClient这样的依赖项,它需要作为Aurelia的一部分运行应用程序,而我是从VS代码扩展的上下文运行。
因此,我正在研究可能能够静态分析代码而不消耗代码的工具,例如TSLint,但我无法看到提取类属性和方法的任何工具。
有没有人知道那些可以做我想要实现的工具?
答案 0 :(得分:3)
您应该使用编译器本身来实现此目的。编译器提供了用于所有支持typescript的IDE的intel意识的API。 Link to the API。语言服务应该能够分析课程并提供信息。我会查看天气,你可以访问已在VS Code中运行的语言服务,但我没有相关信息。