Typescript JSDoc тип групповой суммы - PullRequest
0 голосов
/ 02 июня 2019

Я использую JSDoc, чтобы дать некоторые базовые типы моему javascript.Он отлично работает и делает intellisense очень полезным опытом.Однако javascript все еще является javascript, и я предпочитаю использовать константы, а не строки в реальном коде.Однако, когда я пытаюсь построить объект, который «группирует» все возможные значения, я не могу набрать его правильно или использовать для функции, которая возвращает определенный тип.Позвольте мне объяснить это на примере

/**
 * @typedef {'running'|'stopped'|'running'|'not-started'} Status
 */

export const TaskStatus = {
    /** @type {'stopped'} */
    STOPPED: 'stopped',
    PAUSED: 'paused',
    RUNNING: 'running',
    NOT_STARTED: 'not-started'
};

В этом случае я получаю следующую ошибку в первой строке объекта TaskStatus

Type 'string' is not assignable to type '"stopped"'.ts(2322)

Если я пытаюсь ввести функциючто ожидается возвращение этого определенного типа с использованием констант на объекте, я получаю ту же ошибку:

/**
 * computes the status of a task based on its fields
 * @param {Task} param0 
 * @returns {Status}
 */
export const getTaskStatus = ({ startedAt, stoppedAt, pauses }) => {
    if (stoppedAt) return TaskStatus.STOPPED;  // does not show an error because it is typed as Status, but I have an error on the definition
    if (startedAt && isPaused(pauses)) return TaskStatus.PAUSED;  // same error
    if (startedAt) return TaskStatus.RUNNING;  // same error
    return TaskStatus.NOT_STARTED;
};

Как я могу ввести строку с типом, который я только что определил?Это строки, которые соответствуют указанному значению, так что не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...