Скажем, у меня есть перечисление
export enum status {
PENDING = 'pending',
SUCCESS = 'success',
FAIL = 'fail'
}
Предположим, что это перечисление используется в нескольких местах (то есть я не могу просто заменить его чем-то другим). Тем не менее, я ожидаю, что другие разработчики будут добавлять / удалять статусы из него в будущем.
Теперь у меня есть объект obj, на который я хочу выглядеть следующим образом
let obj = {
pending: 10,
success: 20,
fail: 0
}
Я хочуопределить интерфейс для объекта. Я мог бы сделать что-то вроде
interface objInterface = {
[key: string]: number;
}
, однако теперь кто-то может установить для obj значение
obj = {
flip: 3333
}
Я не хочу, чтобы это происходило, я хочу только ожидания, успеха, неудачи, так какопределено в перечислении выше.
В идеале я бы сделал что-то вроде
interface objInterface = {
[key: TransactionStatus] : number;
}
Но это не сработало - выдает эту ошибку:
ключ (параметра): TransactionStatus Тип параметра подписи индекса не может быть типом объединения. Попробуйте вместо этого использовать сопоставленный тип объекта. Ts (1337)
Как лучше всего это сделать?
Я попытался
type objType = {
[K in keyof typeof status]: number;
};
Но тогда, когдая нахожу над ним, я вижу, что это переводится как
type objType = {
readOnly PENDING: number,
readOnly SUCCESS: number,
readOnly FAIL: number
}