Во-первых, откуда вдруг на клиенте должны появиться огромные объёмы данных, которые будут генерировать эти ошибки и затруднять их поиск? Вы собрались логику на клиенте считать? Тогда у нас уже тут принципиальное несовпадение по вопросам "соответствующих инструментов". Клиент в вебе нужен только для представления. Ну ещё какой-то интерактив - формы, события... Всё.
как мартышка ковыряешься с проставлением типов (а иногда это и не особо очевидно), а потом оказывается что какой-нибудь популярный плагин (условный слайдер) в твоей экосистеме - не типизирован. Ручками писать? Потрошить внутренности плагина? Искать аналог?
declare module 'ldapjs-type-parsers';
, где подставить имя пакета, для которого нет типов.interface RequestModel<T> extends Request {
body: T
}
class UserRegisterModel {
first_name: string;
last_name: string;
email: string;
password: string;
constructor({first_name}) {
this.first_name = firstname;
// И так все НУЖНЫЕ поля
}
}
app.post('/register', async (req: RequestModel<UserRegisterModel>, res) => {
if(req.body) {
const user = new UserRegisterModel(req.body);
// Хоба и лишних полей нет ))
}
});
{
"message": ""// Ошибка валидации тут
}
{
"message": "",
"parent": {
"child": "" // Ошибка валидации тут
}
}
type IErrorMessage = Record<string, any>;
function formatErrorsHelper(errors: ValidationError[]): IErrorMessage[] {
return errors.map((item): IErrorMessage => {
const { property, constraints, children } = item;
const result: IErrorMessage = {};
if (constraints) {
result[property] = Object.values(constraints);
}
if (Array.isArray(children) && children.length > 0) {
result[property] = formatErrorsHelper(children);
}
return result;
});
}
{
"message": ["Сообщение об ошибке валидации"],
"parent": [
{
"child": ["Сообщение об ошибке валидации"]
}
]
}
например что у ControlsProps нет метода foreach(когда я работаю с объектом controls)
if (Array.isArray(prop)) {
// тут метод forEach вызывать можно, ибо массив
}
может подход с ControlsProps | ControlsProps[] в корне неправильный
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
declare module 'vue/types/vue' {
interface Vue {
$Kota: () => void
}
}
const Plugin = {
install(Vue: any, options?: any) {
Vue.prototype.$Kota = function () {
console.log('Мяу')
}
}
}
Vue.use(Plugin)
new Vue({
router,
store,
render: h => h(App),
}).$mount('#app')