2016-12-28 129 views
0

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

回答

0

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') –