Я использую 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;
};
Как я могу ввести строку с типом, который я только что определил?Это строки, которые соответствуют указанному значению, так что не так?