Как повторно использовать аргумент конструктора класса в виде литеральной строки с TypeScript? - PullRequest
0 голосов
/ 27 февраля 2020

Как я могу это сделать?

type Module = {
    created: number;
}

class Example {
    constructor(
        public readonly moduleName: string
    ) { }

    getModule = (modules: {
        [this.moduleName]: Module // <-- property error
    }) => modules[this.moduleName]
}

Ошибка свойства: «Вычисляемое имя свойства в литерале типа должно ссылаться на выражение, тип которого является литеральным типом или типом« уникальный символ ».»

Детская площадка здесь

1 Ответ

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

Это то, что вы пытаетесь сделать?

type Module = {
    created: number;
}

class Test<T extends string> {
    constructor(
        public readonly moduleName: T
    ) { }

    getModule = (modules: {
        [key: string]: Module
    }): Module => modules[this.moduleName]
}

Вы пытаетесь смешать stati c, печатая с динамической c сборкой во время выполнения. Без предоставления системе типов информации о возможных значениях, таких как ModuleNames в качестве строкового литерального распознаваемого объединения, мало что может рассказать вам о том, что это делает во время выполнения.

Похоже, этот объект займет ключевой объект модулей и возврат из этого «своего собственного модуля».

Примерно так:

type Module = {
    created: number;
}

interface ModuleCache { [key: string]: Module }

class Test<T extends string> {
    constructor(
        public readonly moduleName: T
    ) { }

    getModule = (modules: ModuleCache): Module =>
        modules[this.moduleName]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...