分析Typescript文件以获取类结构

时间:2017-09-01 10:40:58

标签: javascript typescript visual-studio-code aurelia tslint

我正在尝试为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,但我无法看到提取类属性和方法的任何工具。

有没有人知道那些可以做我想要实现的工具?

1 个答案:

答案 0 :(得分:3)

您应该使用编译器本身来实现此目的。编译器提供了用于所有支持typescript的IDE的intel意识的API。 Link to the API。语言服务应该能够分析课程并提供信息。我会查看天气,你可以访问已在VS Code中运行的语言服务,但我没有相关信息。