Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.
Как написать валидатор уникального имени строки?
Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Даны type Row = { id: number; name: string } и строки [{id:1,name:'A'},{id:2,name:'B'}]. Validator имеет тип (value: unknown) => string | undefined. При редактировании name нужно запретить пустую строку и совпадение имени с другой строкой после trim и приведения к нижнему регистру. Текущая строка исключается по id.
Ответ
Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.
function nameValidator(rows: Row[], editedId: number): Validator {
return value => {
if (typeof value !== 'string' || !value.trim()) return 'Введите имя';
const key = value.trim().toLowerCase();
return rows.some(row => row.id !== editedId &&
row.name.trim().toLowerCase() === key) ? 'Имя уже занято' : undefined;
};
}
Редактирование строки 1 со значением ' A ' проходит, с 'b' — возвращает ошибку. Для серверного сохранения такую проверку повторяют на backend: клиентская проверка не защищает от параллельных изменений.