typescript, статический элемент доступа

Я хочу иметь такую вещь — 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`; }
}}

Как это исправить или реализовать? Спасибо!.

ОБНОВЛЕНИЕ


Одно из возможных решений

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 ответ

  1. 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);