Участники Stati c пропадают после TSC - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть класс, содержащий глобальные значения, которые я объявляю как stati c в машинописном тексте.

Это выглядит так:

export default class Globals {
    // All members should be public static - no instantiation required
    public static GraphAPIToken: null
    public static APP_ID: "appidstringhere"
    public static APP_SECRET: "thisisasecret"
    public static TOKEN_ENDPOINT: "https://login.microsoftonline.com/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeeeeee/oauth2/v2.0/token"
    public static MS_GRAPH_SCOPE: "https://graph.microsoft.com/.default"
}

После компиляции в js с использованием TS C (Typescript 3.7.3) это приводит к следующему:

"use strict";
exports.__esModule = true;
var Globals = /** @class */ (function () {
    function Globals() {
    }
    return Globals;
}());
exports["default"] = Globals;

Мой вопрос: что случилось с моими членами!?

Любые идеи приветствуются:)

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Мне кажется, что вы объявляете тип ваших переменных * stati c здесь как предполагаемые значения ваших переменных * stati c. Например:

public static APP_ID: "appidstringhere"

, который говорит, что APP_ID имеет тип "appidstringhere", когда вы должны сказать:

public static APP_ID: string = "appidstringhere"

, который говорит, что APP_ID имеет тип string и имеет значение "appidstringhere".

0 голосов
/ 07 февраля 2020

Вы фактически не присваиваете своих членов, вы определяете их как неопределенные переменные с типами. Используйте = вместо :.

export default class Globals {
    // All members should be public static - no instantiation required
    public static GraphAPIToken = null;
    public static APP_ID = "appidstringhere";
    public static APP_SECRET = "thisisasecret";
    public static TOKEN_ENDPOINT = "https://login.microsoftonline.com/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeeeeee/oauth2/v2.0/token";
    public static MS_GRAPH_SCOPE = "https://graph.microsoft.com/.default";
}

Дополнительный контекст: TypeScript позволяет строковым и целочисленным константам работать как типы, так что параметр, принимающий left и right, будет выбрасывать Ошибка времени компиляции, если вы передаете строку, которая не является одним из этих двух значений. В отличие от определения объекта, такого как {foo: "bar"}, вы определили class, а поля классов в TypeScript используют : для определения типов и = для определения значений.

Я думаю, интересно, что TypeScript не жалуется, что якобы не принимает undefined, но это отдельный вопрос.

...