Вот несколько способов строго указать, что все значения перечисления должны использоваться в другом типе при использовании TypeScript:
- Используйте сопоставленный тип, чтобы сопоставить значения перечисления с типом:
enum StatusEnum {
Error = '404',
Success = '200',
Redirect = '301'
}
type Status = {
[K in keyof typeof StatusEnum]: StatusEnum[K]
};
interface ElementByStatus {
status: Status;
}
Это приведет к тому, что для статуса потребуются все значения перечисления.
- Определите тип как объединение всех значений перечисления:
type Status = StatusEnum.Error | StatusEnum.Success | StatusEnum.Redirect;
interface ElementByStatus {
status: Status;
}
- Добавьте универсальный тип, который требует реализации всех ключей:
interface ElementByStatus {
status: T;
}
const element: ElementByStatus = {
status: StatusEnum.Success
} // ошибка, не все ключи реализованы
Это гарантирует, что любая реализация ElementByStatus должна охватывать все значения перечисления.
Важные ограничения - нельзя использовать сторонние библиотеки, линтеры и тд, нужно затипизировать строго с помощью ts. и использовать именно enum, а не объект(проект большой и поменять enum на объект очень сложно будет).