const log = {
counter: {
a: 1,
b: 2,
c: 3,
},
increment(entry: keyof typeof this.counter){
this.counter[entry]++;
}
};
function incrementLog(entry:keyof typeof log.counter){
log.counter[entry]++;
}
incrementLog('a'); // ok
incrementLog('d'); // error, must be 'a' | 'b' | 'c'
log.increment('a'); // ok
log.increment('d'); // no error
Playground Link
Я хочу, чтобы тип аргумента метода increment
был равен keyof typeof log.counter
, что равно 'a' | 'b' | 'c'
. Я могу добиться этого в автономной функции, но она не работает в методе increment
: 'this' is not defined.
Я также пробовал log.counter
вместо this.counter
в определении метода, но это создает «циклический инициализатор», который также не работает должным образом.
Я надеюсь не вводить log
вручную или counter
вручную, потому что когда я делаю изменения в объекте, я надеюсь внести изменения только в одном месте.