изменяет его поля(сбрасывает), столкнулся с проблемой, что получаю ошибку мол Type 'string' is not assignable to type 'T[keyof T]'.
'T[keyof T]' could be instantiated with an arbitrary type which could be unrelated to 'string'.ts(2322)
Я то вроде смысл ошибки понимаю, но как ее решить?
export const resetAllFields = <T extends object>(obj: T) => {
Object.keys(obj).forEach((key) => {
if (typeof obj[key as keyof T] === 'string') {
obj[key as keyof T] = ''; <=== Error
}
});
return obj;
};
Я человек простой - вижу forEach с return - ставлю минус
Окей, а по ошибке что?
А зачем obj[key as keyof T], почему просто obj[key]?
если просто тогда вот так: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'. No index signature with a parameter of type 'string' was found on type '{}'
object замени на Record<string, any>
И после - можешь удалить if условия
Да, так и сделал, спасибо
Ууууу, как же мне не нравится это. Лучше бы возвращал новый объект...
return obj если добавить, то вернет указатель на тот же объект
Object.fromEntries юзаешь после keys и нет проблем
Я понял, тебе лишь бы сказать, чё не нравится))0)
Как лексему крутить мне всё равно, особенно с учетом инвариантов
зачем? Может нужно очистить переданный объект, а не возваращать новый
Например при дебаге такое будет работать в минус. Ибо нужна повторяемость процесса, а иначе - удачи ловить ошибки
Даже обновленное апи на js выкатили - toSorted, toSpiced, toReversed, with
Тем что мутировать аргументы функции это потенциальная дыра для багов.
Можно ещё вместе string юзнуть встроенный alias - PropertyKey
Можно, но если только стринговые ключи(какие очень часто), лучше лишний раз ограничить. Надо будет - расширит
Смысла нет, эти две записи идентичны.
Обсуждают сегодня