#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);
Комментариев нет:
Отправить комментарий