Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

javascript создание модели данных

#javascript


Вопрос общий, о том как правильно делать.

В С# или 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?
    


Ответы

Ответ 1



1. вашу проблему можно решить со стороны сервера Я получаю с сервера json такого вида 2. а можно со стороны клиента если не нужна проверка типов то проще сделать так: 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://"} 3. TypeScript считается что 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 } } ещё ссылок https://github.com/typeorm/typeorm https://github.com/typeorm/typescript-example https://github.com/typestack/routing-controllers и не забываем, что любая проверка типов это небольшая, но работа (не хочу писать замедление) UPD: ещё можно поискать что-либо на тему JSON валидации, но это выглядит более фантастично, чем проброс типов в JS из TS

Ответ 2



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);

Комментариев нет:

Отправить комментарий