То, что вы хотите, напрямую невозможно. Когда вы делаете keyof typeof
, вы создаете тип объединения 'CREATED' | 'OK' | 'NOT_FOUND' ...
, который полностью отделен от перечисления, которым он когда-то был.
Самое близкое, что вы можете получить, это сделать
function sendStatus(code: HttpStatus) {
// code
}
send(HttpStatus.OK) // This will autocomplete and show the status code numbers
, а затем преобразование кода в строку внутри функции sendStatus
.
Трудно сказать, чего вы на самом деле хотите, не зная точного использования, которое вы ищете, но я бы рассмотрел просто наличие простого старого объекта вместо enum
const HTTP_STATUS = {'OK':200, 'CREATED':201} as const
Затем, если вам нужно, вы также можете создать оба типа, например, так:
type StringStatus = keyof typeof HTTP_STATUS // 'OK' | 'CREATED'
type NumsStatus = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS] // 200 | 201
Как правило, редко есть веская причина для использования enum
с в современном ТС. Обычно объекты и / или типы объединения делают работу намного лучше.