Вопрос общий, о том как правильно делать.
В С# или Java я создаю модели для манипулирования данных. Например:
class Post
{
public int id;
public string title;
}
Тут же я могу задать дефолтные значения, и всегда знаю какие есть поля.
В js тоже есть классы, но мне не понятно как организовывать их структуру в проекте, и правильный ли это подход?
Пример проблемы:
Я получаю с сервера json такого вида
[
{
id:0,
arr:['1','2']
},
{
id:1,
}
]
Теперь если я сделаю скажем так:
data[1].arr[0]//undefined
то я получу ошибку. Ее не было бы если бы была модель которая описывать получаемые данные с дефолтными значениями.
Вопрос: как правильно решать такую проблему в js? Если классами, то как организовать проект(выносить каждый класс в отельный файл? А потом импортировать где нужно?). Может как то помочь в этом вопросе typescript?
class Smth {
constructor(info) {
this.id = info.id;
this.arr = info.arr || [];
}
}
var data = [{
id:0,
arr:['1','2']
},{
id:1,
}];
data = data.map(x => new Smth(x));
console.log(data[1].arr.length);
Я получаю с сервера json такого вида
если не нужна проверка типов то проще сделать так:
const user = {
login: null,
password: null,
age: null,
avatar: null,
}
let serverResponce = {
user: {
login: 'qwa',
avatar: 'htttp://',
}
}
let nUser = Object.assign({}, user, serverResponce.user)
console.log(nUser)
//{login: "qwa", password: null, age: null, avatar: "htttp://"}
считается что TypeScript С#'ам ближе чем JS'ам и если не пугает:
© Чего на самом деле не хватает? Нормального pattern matching-а, ну и иногда тоска накатывает из-за отсутствия typesafety. Но в такие моменты я обычно вспоминаю def myFunc[A, B >: C, E:A, D / E](a: A, b:B, c:C, d;D, e: E): [A / E] и как-то легче становится :)
смотри
https://www.typescriptlang.org/docs/handbook/decorators.html
ключевые слова reflect-metadata
@validate
tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
ещё ссылок
и не забываем, что любая проверка типов это небольшая, но работа (не хочу писать замедление)
UPD: ещё можно поискать что-либо на тему JSON валидации, но это выглядит более фантастично, чем проброс типов в JS из TS
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Реализовано сворачивание\разворачивание таблицы при нажатии на кнопкуПочему первая таблица работает как надо, а ее копия ниже не работает?...
Всем привет! Столкнулся с интересной задачей: имеется строка, в которой могут содержаться непечатаемые символы(пробел, перевод каретки, табуляция...
Пожалуй, это глупый вопрос, но почему-то не получается разобратьсяЕсть такая интересная маленькая и хрупкая библиотека i miss you: https://github