打字稿,访问静态成员

打字稿,访问静态成员

问题描述:

我想要有这样的事情 - 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`; } 
}} 

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

UPDATE


一个可能的解决方案

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`; 
}} 

Api.drinkDrink,类(构造函数),这是具有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); 
+0

这不是它是财产的方法。所以我可以不用()来访问它。 – ovasylenko

+0

我发现我可以通过模块来实现它,模块Api输出模块饮料{var_base ='/ api/drink'; export var info ='$ {base}/info'; } 导出模块管理员{var_base ='/ api/drink'; export var info ='$ {base}/info';} } – ovasylenko

+0

@ovasylenko:是的,这就是我的意思*“但是最好导出'Drink'并直接使用它:”*(对不起,错过'info'上的'get') –