typescript,访问静态成员

时间:2016-12-28 10:40:15

标签: javascript typescript static

我想要这样的东西 - Api.drinks.info - >这是静态的并返回字符串。但是我有一个错误this

module App {
export class Api {
    public static drink: Drink;
}

class Drink {
    static get base(): string { return '/api/drink'; }
    public static get info(): string { return `${Drink.base}/info`; }
}}

我该如何解决或实施?谢谢。

更新

可能的解决方案之一

module Api {
export module Drink {
    var base = '/api/drink';
    export var info = `${base}/info`;
}
export module Admin {
    var base = '/api/drink';
    export var info = `${base}/info`;
}}

1 个答案:

答案 0 :(得分:0)

Api.drink不是Drink,类(构造函数),而是info;它是Drink实例,但却没有。尝试访问它的行尝试使用该实例,就像它是类一样。

您不导出Drink,因此访问它的唯一方法就是迂回:

this.resource = this.dataAccessService.getResource(Api.drink.constructor.info);

...但最好导出Drink并直接使用它:

this.resource = this.dataAccessService.getResource(Drink.info);

请注意,引用的代码永远不会为drink实例赋值,因此您需要使用上述任何一种方法。

或者,您是否打算将Drink(构造函数)公开为Api的静态成员?如果是这样,你需要稍微改变一下,看看评论:

module App {
    // Classes aren't hoisted, so this needs to be before Api
    class Drink {
        static get base(): string { return '/api/drink'; }
        public static get info(): string { return `${Drink.base}/info`; }
    }

    export class Api {
        // 1. It's a function
        // 2. We're initializing it to Drink
        // 3. Because it's a constructor function / class, we use an
        //    initial capital letter in its name
        public static Drink: Function = Drink;
    }
}

然后:

this.resource = this.dataAccessService.getResource(Api.Drink.info);