• Как передать любой тип используя дженерики?

    search
    @search
    мама говорит что я особенный
    TBody в таком случае должен стать дженериком.

    type TUserInfo = {
       id: num,
       readonly fname: string,
       readonly lname: string
    }
    
    type TBody<T> = {
       success: boolean,
       user?: T
    }


    И далее по ходу

    const fechUserInfo = (): Promise<TBody<TUserInfo>> => {
      return fetch().then(response => response.json()).then((user: TUserInfo) => ({success: true, user}));
    }
    Ответ написан
    Комментировать
  • Как создавать компоненты динамически в зависимости от данных с API, используя Angular?

    search
    @search
    мама говорит что я особенный
    В общем случае, динамические компоненты реализуются при помощи роутера. В вашем случае, кажды таб - это какой-то уникальный путь. Список табов подгружается через API и на основе подгруженных данных формируется массив вроде

    [
      { name: 'Chart 1', routerLink: ['/chart-1']},
      { name: 'Chart 2 ', routerLink: ['/chart-2']},
    ]


    Дальше на основе этого массива строится компонент с табами. А сами компоненты табов будут подгружаться при помощи роутера при переходе на таб.
    Ответ написан
    Комментировать
  • Что делать если нет @types для react пакета?

    search
    @search
    мама говорит что я особенный
    В таком случае вам понадобится создать *.d.ts файл самостоятельно и подключить его в tsconfig.json

    Вот тут подробнее https://www.typescriptlang.org/docs/handbook/2/typ...
    Ответ написан
    1 комментарий
  • С чего начать изучение алгоритмов?

    search
    @search
    мама говорит что я особенный
    Вообще, многие задачи можно свести к правильному выбору структуры данных. Да-да, есть всякие задачи поиска кратчайшего пути, жадные алгоритмы, динамическое программирование. Но в основном, те задачи, которые появляются на сайтах, подобных codewars или на собеседованиях, можно так или иначе решить, выбрав правильную структуру данных.

    Советую методично прорешать все задачи из этого раздела хакерранка https://www.hackerrank.com/domains/data-structures . В прошлом это повысило мой скилл и дало немало уверенности в себе. Удачи!
    Ответ написан
    Комментировать
  • Почему Webstorm подсвечивает оператор spread?

    search
    @search
    мама говорит что я особенный
    Попробуйте внизу экрана нажать кнопку Typescript и найти там пункт Restart. Обычно помогает в таких ситуациях.
    Ответ написан
  • Почему без модуля path не работает путь от файла?

    search
    @search
    мама говорит что я особенный
    Важно знать каким образом вы обращаетесь к файлу. Но готов предположить что это что-то типа fs.readFile. Если передать относительный путь в большинство функций модуля fs, то файл будет резолвиться относительно рабочей директории проекта. Рабочую директорию проекта можно узнать выполнив process.cwd().

    Рабочая директория проекта обычно не меняется от модуля к модулю.
    Ответ написан
  • Как бы вы реализовали бы проверку данных основываясь на существующем коде?

    search
    @search
    мама говорит что я особенный
    Библиотеку бы заюзал. Нафиг надо придумывать то, что уже придумано.

    Например, такую https://github.com/jquense/yup

    Ну или какую-нибудь другую, главное чтоб она была про валидацию данных.
    Ответ написан
    Комментировать
  • Как правильно определять тип объекта в Typescript (React)?

    search
    @search
    мама говорит что я особенный
    Тайпскрипт правильно ругается потому что таргет события не обязательно должен быть дом элементом. События могут так же порождаться, например XHR запросами.

    Я бы на вашем месте сделал так называемую type guard функцию, в которой убеждался бы что таргет действительно элемент дом. Все элементы дом наследуются от объекта HTMLElement. Это можно использовать для проверки:

    const isHtmlElement = (v: any): v is HTMLElement => v instanceof HTMLElement;


    далее мы можем использовать эту функцию для проверки нашего таргета:

    const eventHandler = (e: Event) => {
      if (!isHtmlElement(e.target)) {
        return;
      }
      // Вот здесь мы можем смело работать с таргетом как с ДОМ Элементом
      e.target.classList.toggle('active');
    }


    УПД

    Еще информация к размышлению.

    Финальный код, сгенерированный тайпскриптом, не содержит информации о типах. В рантайме нельзя узнать тип интерфейса, выполнив, например `peremennaya instanceof VashInterfeis`. Но всегда можно создать type guard функию, которая будет определять что объект именно нужного типа по каким-то косвенным признакам (например по наличию определённых полей в объекте). Так как код guard функции невозможно провертить статическим анализватором, тайпскрипт не может гарантировать того что ваша guard фунция верна и не пропускает всё подряд. Поэтому, хорошим тоном является писать такой код, который не нуждается в подобных проверках. Это возможно. Код при таком подходе становится стройнее и легче для осмысления.
    Ответ написан
    1 комментарий
  • Почему не срабатывает assets при вставке картинки в html?

    search
    @search
    мама говорит что я особенный
    1:
    npm i -D html-loader

    2:
    {
      test: /\.html$/,
      use: ["html-loader"],
    },
    Ответ написан
  • На каком уровне нужно знать js, html. css чтобы изучать React?

    search
    @search
    мама говорит что я особенный
    Та на любом. Как и все программисты вы начнёте свой путь со звания "самый отстойный программист в мире". Может быть вас даже кто-нибудь наймёт для того чтоб сделать самый отстойный сайт в мире. Сколько вы пробудите в этом звании зависит только от вас.
    Ответ написан
    Комментировать
  • Какую альтернативу Prettier можно посоветовать, чтобы решить проблему длинных и коротких строк?

    search
    @search
    мама говорит что я особенный
    Вот тут обсуждают как это преодалеть, но методы черезжопные: https://github.com/prettier/prettier-vscode/issues/352

    Единственная альтернатива преттиеру - это eslint, но это так себе альтернатива, если честно.

    На вашем месте я бы внедрил преттиер и доверился ему. Его используют проекты на тысячи контрибьютеров (тот же реакт и ангулар) и особо не жалуются. Да, в нём есть недостатки, и не всем нравится формат. Но единообразный формат кода и отсутсвие споров на тему что лучше, перевешивают любые его минусы. Не использовать преттиер потому что он сворачивает короткие массивы и в гит блейме сразу не видно кто добавил элемент в массив - это как не пользоваться ножом потому что можно порезаться.
    Ответ написан
    4 комментария
  • Исполнитель удалил проект с сервера заказчика?

    search
    @search
    мама говорит что я особенный
    При ведении дел в неправовом поле желательно приготовиться к решению проблем неправовыми методами. Как с одной, так и с другой стороны.
    Ответ написан
    6 комментариев
  • Почему на айфоне нет настройки уведомлений для браузеров?

    search
    @search
    мама говорит что я особенный
    Web Push Notifications не поддерживаются айфоном.

    Говорят что Эппл собирается это выкатить, но пока этого нет.
    Ответ написан
    Комментировать
  • Как организовать работу нескольких back-end разработчиков в одном проекте?

    search
    @search
    мама говорит что я особенный
    При реконфигурировании команды программистов, полезно проводить аналогию со строителями. Это достаточно наглядно. Например, с кафельщиками. В вашем случае, есть проект - это квартира. И есть один кафельщик, который не справляется в срок. Ему нужна помощь. Можно дать ему еще одного кафельщика в помощь. Дальше, если они работают в одной комнате, им прийдётся договариваться между собой. Как минимум, первому кафельщику придётся потратить время на то, чтоб объяснить воторому план работ, который тот держал в голове. Часто это занимает крайне много времени. Идеальный вариант - поместить кафельщиков в разные комнаты, тогда им не прийдётся договариваться и, скорее всего, работа пойдёт быстрее.

    Еще можно узнать у вашего кафельщика, может ему нужен чуть менее квалифицированный помощник? Может лучше нанять кого-то, кто будет мешать цемент? Например, заниматься администрированием или миграциями.

    По своему опыту скажу, что идеальный вариант - это гетерогенные неперсекающиеся команды. Например, команда, состоящая из бэкендера, админа/девопса и, например, информационного аналитика.

    В общем, я бы поговорил с бэкендером и узнал, что его бесит на проекте.
    Ответ написан
    Комментировать
  • Что использовать Сервисы или Глобальные хранилища?

    search
    @search
    мама говорит что я особенный
    Переменные в сервисах мало чем отличаются от глобальных переменных. По сути - это и есть глобальные переменные со всеми вытекающими последствиями. Например, переменная сервиса может быть неожиданно изменена во время какого-нибудь асинхронного действия. Что приведёт к неожиданным/нежелательным сайд-эффектам. Современные ООП парадигмы (например, ДДД), напрямую говорят о том что сервисы не должны хранить состояние.
    Ответ написан
    Комментировать
  • В чем преимущество Angular перед Vue или React?

    search
    @search
    мама говорит что я особенный
    Пользовался Ангуляром почти 3 года. Главный плюс Ангуляра в том что это платформа. В ней стандартизированно почти всё: от процесса бутстрепа до процесса деплоя. Включая работу с CLI, тестированием и еще много чем. Это огромный селлинг поинт для проектов корпоративного уровня: когда над проектом трудится много человек из разных стран. Им не нужно договариваться об архитектуре, тестировании, и т.п. потому что Ангуляр предоставляет готовые решения на многие проблемы.

    Лично я бы не стал пихать Ангуляр в проект уровня дэшборда или лендинга. Но для проекта уровня, например, клиент банка, Ангуляр может быть отличным кандитадом.

    Я не пользовался Вью никогда, поэтому не знаю что он предоставляет. Но после где-то двух лет на Реакте (огромный проект с микрофронтендной архитектурой для Dazn) впечатления такие: в целом весело. Очень хорошо подходит для прототипов и небольших проектиков. Но для энтерпрайз проекта я бы не стал его советовать, так как слишком много нерешенных или по-детски решённых проблем. Командам будет сложно договариваться между собой.

    Такие дела.
    Ответ написан
    Комментировать
  • Как в React Modules Stylesheet использовать со своими стилями?

    search
    @search
    мама говорит что я особенный
    Глобальные классы обычно выставляются глобально, например в index.css и подключаются, например в index.js как:

    import './index.css'

    А CSS модули хранятся рядом с кодом компонентов и сами файлы, именуются с суффиксом module, например Header.module.css. Подключаются CSS модули в самих компонентов как-то так:

    import styles from './Header.module.css'

    И используются так:

    <div className={`${styles.header} global-class-1 global-class-2`}></div>
    Ответ написан
    2 комментария
  • Как заигнорить .idea?

    search
    @search
    мама говорит что я особенный
    Выполните `git rm -r .idea`.

    Ну и оставить `.idea` в  `.gitignore` тоже не мешало бы. Чтоб эти файлы снова не появились.
    Ответ написан
  • React GitHub pages, как обновить код уже на готовом репозитории?

    search
    @search
    мама говорит что я особенный
    Код, предназначенный для GitHub Pages находится в ветке gh-page. Я так подозреваю что у вас такая структура проекта:
    - в ветке main (или master) находится реакт приложение, файл packages.json и вот это вот всё
    - есть ветка gh-pages

    Самый простой способ (как по мне) будет в ветке master(main) сделать

    - npm i -D gh-pages (или yarn add gh-pages -D)
    - в секцию scripts package.json добавить:
    "predeploy": "npm run build" (или yanr build если у вас yarn),
    "deploy": "gh-pages -d build -m 'Automatically update gh-pages [skip ci]'",

    После этого из консоли можно выполнять `npm run deploy` (или yarn deploy) и проект будет собираться и выкатываться на gh-pages.

    Можно еще запилить GH Action для красоты, тогда вся движня с билдом и деплоем будет выполняться автоматически при кажом пуше в master.
    Ответ написан
    Комментировать
  • Как устранить ошибку при запуске karma тестов для Angular в gitlab CI?

    search
    @search
    мама говорит что я особенный
    Поправьте karma.config.js:
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: ['--no-sandbox']
      }
    },


    Вот обсуждение этой движни https://github.com/karma-runner/karma-chrome-launc...
    Ответ написан
    Комментировать