打字稿,访问静态成员
问题描述:
我想要有这样的事情 - Api.drinks.info - >这是静态的,并返回字符串。但我有一个错误打字稿,访问静态成员
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.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);
这不是它是财产的方法。所以我可以不用()来访问它。 – ovasylenko
我发现我可以通过模块来实现它,模块Api输出模块饮料{var_base ='/ api/drink'; export var info ='$ {base}/info'; } 导出模块管理员{var_base ='/ api/drink'; export var info ='$ {base}/info';} } – ovasylenko
@ovasylenko:是的,这就是我的意思*“但是最好导出'Drink'并直接使用它:”*(对不起,错过'info'上的'get') –