Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос

Евгений Лубяной

  • 1
    вклад
  • 31
    вопрос
  • 9
    ответов
  • 56%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как в TS получить тип, возвращаемого функцией результата?

    Nipheris
    Станислав Макаров @Nipheris
    ReturnType
    Ответ написан более года назад
    Комментировать
    Нравится 1 Комментировать
  • Как в TS получить тип, возвращаемого функцией результата?

    Interface @Interface
    Если я все правильно понял то сигнатура runAgents должна стать чем-то вроде:
    async function runAgents<T extends IAgentList>(agents: T): Promise<ResolveResult<T>>

    где ResolveResult:
    type ResolveResult<T extends IAgentList> = {
        [key in keyof T]: T[key] extends IAgentBase<infer R> ? R : never;
    }


    Решение основанно на infer из TS 2.8: https://www.typescriptlang.org/docs/handbook/relea...

    Весь код (слегка измененный):
    spoiler
    type IItem = {type: 'IItem'};
    type IDataSet = {type: 'IDataSet'};
    export type IAgentList = {
        [key: string]: IAgentBase<any>;
    }
    
    export interface IAgents extends IAgentList {
        items: IItemsParser;
        page: IPageParser;
        parser: IWebParser;
    }
    
    export interface IAgentBase<T> {
        parse(): Promise<T>;
    }
    
    export interface IItemsParser extends IAgentBase<IItem[]> {
    }
    
    export interface IPageParser extends IAgentBase<IDataSet[]> {
    }
    
    export interface IWebParser extends IAgentBase<any> {
    }
    
    export interface IAgentsResult<T> {
        items?: IItem[];
        page?: IDataSet[];
        parser?: any;
    }
    
    type ResolveResult<T extends IAgentList> = {
        [key in keyof T]: T[key] extends IAgentBase<infer R> ? R : never;
    }
    
    // в реальности все иначе, написал для понимания желаемого результата
    async function runAgents<T extends IAgentList>(agents: T): Promise<ResolveResult<T>> {
        const result: ResolveResult<T> = {} as any;
        Object.keys(agents).forEach(
          async key => result[key as keyof T] = await agents[key as keyof T].parse()
        );
        return result;
    }
    
    async function main() {
        const agents : IAgents = {} as any;
        const result = await runAgents(agents)
        result // typed
    }
    Ответ написан более года назад
    1 комментарий
    Нравится 1 1 комментарий
  • Как Вы организуете фронт и бек если они имеют много общего кода?

    profesor08
    profesor08 @profesor08
    Общий код отдельным модулем. Залей в гит, из гита тащи в проекты.
    Ответ написан более года назад
    Комментировать
    Нравится 4 Комментировать
  • Какой паттерн реализует redux?

    rockon404
    Антон Спирин @rockon404 Куратор тега Redux
    Frontend Developer
    Почитайте статьи о FLUX архитектуре. Впервую очередь, Redux является реализацией идей заложенных в ней, с некоторыми отличиями.
    Ответ написан более года назад
    Комментировать
    Нравится 1 Комментировать
  • Какой паттерн реализует redux?

    kova1ev @kova1ev
    Предположу что observer
    Ответ написан более года назад
    1 комментарий
    Нравится 1 1 комментарий
  • React: как импортировать из директории выше src?

    Anubis
    Anubis @Anubis
    Люблю корейскую кухню и веб-разработку
    Забить на create-react-app, настроить конфиги самому, создать структуру
    - src
    -- common
    -- client
    -- server

    Правда, в случае с изоморфным приложением, которое умеет рендериться на сервере, разделение на client и common неактуально, т.к. всё, что связано с клиентом, будет использовано и на сервере, но всё, что связано с сервером, не будет использовано на клиенте. Так что я бы посоветовал такую структуру:
    - src
    -- app
    -- server
    Ответ написан более двух лет назад
    Комментировать
    Нравится 1 Комментировать
  • Как можно оптимизировать сортировку в запросе к MongoDB?

    lega @lega
    По хорошему фильтр и сортировка должны соответствовать индексу.

    Если нужна максимальная скорость то нужно упростить запрос, избавится от $or и доп. условий, например сделать так:
    1) в документ сохранять готовое значение sender+recipient которое проходит условие, например: { _search1: {user_id1: user_id1, user_id2: user_id2} } (записать ид пользователей в порядке нарастания), заполнять этот массив если выполняются условия с mType, deleted, read, action.
    2) Сделать индекс: db.mail.ensureIndex({_search1: 1, "date" : -1 })
    В итоге запрос выдаст результат быстро и с учетом всех условий:
    collection.find({ _search:{user_id1: user_id1, user_id2: user_id2} }).sort({date: -1})

    Если сортировать идентификаторы не хочется, то можно сделать массивом:
    { _search:[sender, recipient] }, и запрос
    collection.find({ _search:{$all: [sender, recipient]} }).sort({date: -1})
    , для этого случая возможно лучше будет такой индекс: db.mail.ensureIndex({ "date" : -1, _search1: 1 })
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 2 1 комментарий
  • Как посоветуете мигрировать с VueJS на Angular4?

    ozknemoy
    ozknemoy @ozknemoy
    яваскриптист
    нету такой возможности. даже переход с первого ангулара на второй через их мигратор этой больше маркетинг. хотя перевод простенького сайта возможен
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 2 Комментировать
  • Получить объект по id. Фабрика? Провайдер?

    ozknemoy
    ozknemoy @ozknemoy
    яваскриптист
    советую сразу забыть про порт единички в четверку. это маркетинг от разрабов.
    при минификации такой код не будет работать. надо подрубать например вебпаковский ngInject.
    чтобы было по проще можно пока не использовать резолвы. имхо сомнительной нужности штука. чтоб все заработало нажо инжектить резолв entry в контроллер
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
  • Почему не создается model Yii2?

    qonand
    Максим Федоров @qonand
    Software Engineer
    Почему не создается model Yii2?

    Gii Вам четко написал причину проблемы - не найден файл модели. Либо его физически не существует, либо namespace не правильный
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 3 1 комментарий
  • Как спрятать файл на Гитхабе?

    delphinpro
    Сергей delphinpro @delphinpro
    frontend developer
    config.php должен быть исключен из индекса (добавлен в гитигнор) и вообще не попадать в коммиты.
    Вместо него в индекс следует включить файл config-EXAMPLE.php, в котором не будет ваших реальных настроек, а лишь примеры настройки.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 17 Комментировать
  • Верстать без фреймвороков это значит быть не професионалом?

    delphinpro
    Сергей delphinpro @delphinpro Куратор тега CSS
    frontend developer
    Быть профессионалом - значит знать и правильно применять необходимые инструменты для наиболее эффективного решения задачи. А также НЕ применять, если в этом нет необходимости.
    Ответ написан более трёх лет назад
    4 комментария
    Нравится 70 4 комментария
  • Есть ли в TypeScript именованный массивы?

    abberati @abberati
    frontend-разработчик
    есть
    Ответ написан более трёх лет назад
    2 комментария
    Нравится 1 2 комментария
  • Как настроить composer для проектов с схожими зависимостями?

    slo_nik
    Дмитрий @slo_nik Куратор тега Yii
    Добрый день.
    Возможно Вам поможет эта тема
    Ответ написан более трёх лет назад
    2 комментария
    Нравится 1 2 комментария
Оценили как «Нравится»
Самые активные сегодня
  • w3bsmes
    Alice
    • 7 ответов
    • 0 вопросов
  • sergey-gornostaev
    Сергей Горностаев
    • 7 ответов
    • 0 вопросов
  • 0xD34F
    0xD34F
    • 6 ответов
    • 0 вопросов
  • dimonchik2013
    dimonchik2013
    • 6 ответов
    • 0 вопросов
  • Jump
    АртемЪ
    • 6 ответов
    • 0 вопросов
  • Надим Закиров
    • 3 ответа
    • 2 вопроса
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации