Я использую библиотеку (Yup), которая обычно помещает ошибки в виде пар ключ-значение, где значения являются строками в объекте, чтобы я мог их прочитать и отобразить пользователю.Строки - это просто ключи ошибок для поиска в таблице симпатичных сообщений об ошибках.
console.log(errors)
// output
{
required: "form:error:required"
}
Я написал несколько пользовательских функций, так что для некоторых ключей ошибок теперь я возвращаю объект, похожий на:
console.log(errors)
// output
{
minChars: {key: "form:error:minChars", options: {count: 2} }
}
Я использую i18next, где мне нужно передать ключ перевода следующим образом:
t(key, options)
В настоящее время у меня есть очень уродливый код, который выбирает ключ перевода из объекта ошибок, но затем онэто может быть простая строка или объект с ключом и параметрами.
Мой текущий код для этого:
const errorObj = isError ? _.get(errors, field.name, '') : ''
let errorKey, errorOptions
if (typeof errorObj === 'string') {
errorKey = errorObj
} else {
errorKey = errorObj.key
errorOptions = errorObj.options
}
Без этой уродливой проверки типов, нет ли хитрой деструктуризации?можно сделать для обработки нескольких типов возвращаемых данных?
Я пытался возвратить массив вместо объекта, но затем я столкнулся с вопросом о неразличимости строки из массива.
Я пропустилчто-то простое здесь?