Задать вопрос
  • Как исправить ошибку "No overload matches this call" в jest.spyOn на приватном методе?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    jest.spyOn имеет 4 перегрузки, которые отделяют обычные поля (в этих перегрузках есть 3й параметр 'get' | 'set'), методы (функциональный тип на инстансе) и static методы (функциональный тип на самом классе).
    Ваш вызов подразумевает как раз метод.
    Проблема в том, что private и protected поля не матчатся как функциональные типы. Приватные поля вообще не имеют типа за пределами класса, а protected имеют тип только в наследнике.

    Остается только обмануть систему типов:
    declare class ViewHack {
      getPosOnScale(currentPos: number): number;
    }
    describe('some method', () => {
      test('should return smth', () => {
        const view = new View('range-slider', settings);
        jest.spyOn(view as unknown as ViewHack, 'getPosOnScale').mockReturnValue(100);
      });
    });
    Ответ написан
    2 комментария
  • Какой алгоритм вычисления кратности чисел более эффективен?

    Adamos
    @Adamos
    Если нужно определить кратность - то берем учебник Математика, 6 класс.
    Глава Признаки кратности 3, 5 и 9 с минимумом вычислений.
    Если же нужно заполнить массив - то потери времени на его заполнение, да в жабоскрипте, на порядки превышают стоимость этой простенькой проверки.
    Может ускорить (а может и замедлить) этот процесс замена в цикле ++i на прибавление того числа, которое действительно надо прибавить для получения следующего кратного - оно циклично повторяется: [3, 2, 1, 3, 1, 2, 3]. Проверка уберется, но вычислений, на самом деле, только прибавится. Зато без ветвления и пустых циклов.
    Ответ написан
    1 комментарий
  • Где ошибка в коде?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка в коде ДНК.
    Вставить в PHP фрагмент кода на JavaScript и надеяться, что он заработает - это надо быть альтернативно одарённым человеком.
    Ответ написан
    1 комментарий
  • Почему let x не попадает в window?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Мужик, ну ты хотя бы документацию прочитай, прежде чем вопрос задавать!!!

    Вот с MDN цитата

    На верхнем уровне скриптов и функций let, в отличии от var, не создаёт свойства на глобальном объекте.


    ДОКУМЕНТАЦИЯ!!! – наше всё.
    Ответ написан
    13 комментариев
  • Что сделать, чтобы найти тот самый «баланс»?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    1. Лучше иметь вышку, чем не иметь.
    2. В 99.99% случаев вышка не нужна для работы.
    3. Вышка облегчает поиск первой работы.
    4. Вышка не нужна для эмиграции.

    Доучивайтесь в школе, поступайте в ВУЗ, после первого же семестра начинайте искать летнюю стажировку, пытайтесь устроиться в университетский ВЦ или на кафедру, договаривайтесь курса с 4-го на свободное посещение занятий и выход на полную ставку. Посвящайте свободное время не математике, а изучению прикладных знаний и практике.
    Ответ написан
  • Какие ЯП являются (почти) "мертвыми" и бесперспективными?

    @evgeniy_lm
    Мне лично на ум приходит такие как VBA

    Несколько лет назад общался с одним чудиком который возмущался тем что он "крутой программист" знает туеву хучу "крутых ЯП", но не может найти работу, а его "тупой" одноклассник в буржуйской фирме зашибает бабло на "сраном VBA"

    Не существует "бесперспективных" ЯП, существуют бесперспективные программисты
    Ответ написан
    Комментировать
  • Как получить массив массивов с 2-мя объектами из 2-ух массивов с объектами?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Не будем ограничиваться двумя массивами, решим задачу в более общем виде:

    // если уверены, что длины всех массивов будут равны
    const zip = arrs => arrs[0]?.map((n, i) => arrs.map(m => m[i])) ?? [];
    
    // или, вместо отсутствующих значений подставляем какое-то дефолтное
    const zip = (arrs, defaultValue = null) => Array.from(
      { length: Math.max(...arrs.map(n => n.length)) },
      (n, i) => arrs.map(m => i < m.length ? m[i] : defaultValue)
    );
    
    // или
    const zip = (arrs, defaultValue = null) =>
      arrs.reduce((acc, n, i) => (
        n.forEach((m, j) => (acc[j] ??= Array(arrs.length).fill(defaultValue))[i] = m),
        acc
      ), []);

    Как этим пользоваться: const arr = zip([ arr1, arr2 ]);.
    Ответ написан
    1 комментарий
  • Как убедить тайпскрипт, что unknown можно в ReturnType?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    У TypeScript есть ряд проблем с функциональными типами в дженериках из-за их вариантности
    Вот так результат будет аналогичным, но работает без проблем:
    function call<R>(f: () => R): R {
      return f()
    }
    Ответ написан
    5 комментариев
  • Стоит ли идти в NoCode разработку?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    NoCode это инструменты для тех, кто не умеет кодить, но готов потратить немного времени чтобы сделать какую-то штуку сам для себя.
    Специалисты по NoCode не нужны вообще.
    Если кто-то сделал свой "бизнес" и решил сделать себе сайт-визитку, то благодаря NoCode, не особо криворуким рукам и невысоким требованиям к конечному результату, он сможет сам ее себе сделать в одном из тысяч конструкторов.
    Но такому бизнесмену ты вообще не нужен.

    Поэтому твой вопрос глуп сам по сути. NoCode - это возможность сделать что-то простенькое для себя не привлекая разработчиков вообще и экономя на этом деньги. Зарабатывают в NoCode только создатели подобных конструкторов.
    Ответ написан
    Комментировать
  • Стоит ли идти в NoCode разработку?

    inoise
    @inoise Куратор тега Карьера в IT
    Solution Architect, AWS Certified, Serverless
    No code это не разработка
    Ответ написан
    Комментировать
  • Стоит ли идти в NoCode разработку?

    BorLaze
    @BorLaze
    Java developer
    Как бы вайти в айти, но так, чтобы не учить ничего по айти?
    Ответ написан
    Комментировать
  • Как из массива объектов, вытащить значение по ключу?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Одно значение (первое):

    const val = arr.find(n => n.hasOwnProperty(key))?.[key];

    Все, что есть:

    const vals = arr.reduce((acc, n) => (n.hasOwnProperty(key) && acc.push(n[key]), acc), []);
    Ответ написан
    Комментировать
  • Существует ли "отзовик по фирмам" в ИТ сообществе?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Во-первых, отзывы чаще пишут недовольные. Так что вы можете увидеть десять негативных отзывов, не увидеть тысячу позитивных и сформировать неверное представление о компании. Во-вторых, сидящие на дереве птицы не боятся, что под ними сломается ветка, не потому, что верят в ветку, а потому, что верят в свои крылья. Развивайте собственный профессионализм и сможете диктовать условия при заключении трудового договора и требовать его соблюдения от любой компании, либо мгновенно менять провинившуюся компанию.
    Ответ написан
    3 комментария
  • Как оптимизировать код?

    Alexandroppolus
    @Alexandroppolus
    кодир
    function sumNumbers(maxNumber) {
        const buf = new Int8Array(maxNumber);
        let answer = maxNumber > 2 ? 2 : 0;
        for(let i = 3; i < maxNumber; i += 2) {
            if (buf[i] === 1) {
                continue;
            }
            answer += i;
            const i2 = i * 2;
            for(let j = i * i; j < maxNumber; j += i2) {
                buf[j] = 1;
            }
        }
        
        return answer;
    }
    Ответ написан
    3 комментария
  • Как сочетаются наследование и дженерики?

    sarapinit
    @sarapinit
    Точу водой камень
    Вот например:
    class Result<T>{
      public readonly result;
      constructor(result: T){
        this.result = result;
      }  
    }
    
    class NumberResult extends Result<number>{
      constructor(result: number){
        super(result);
      }
    
      public ResultPlusOne(){
        return this.result + 1;
      }
    }


    Result<T> - это открытый дженерик, то есть в будущем на месте T должен быть указан другой\типы или типы для того чтобы создавать экземпляры класса.
    Если мы захотим, например, на место Т поставить number и создать экземпляр класса
    let result = new Result<number>(42)
    то компилятор для этого создаст закрытый дженерик который будет выглядеть примерно так, но вы его нигде не увидите:
    class Result{
      public readonly result;
      constructor(result: number){
        this.result = result;
      }  
    }


    Запись class NumberResult extends Result<number>
    Означает наследование от такого класса Result в котором на место T уже подставлен конкретный тип
    Ответ написан
    8 комментариев
  • Как сочетаются наследование и дженерики?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Классы в TypeScript могут быть дженериками, то есть параметризованы неким типом (или даже несколькими типами). При наследовании нужно передавать такой параметр явно, чтоб TypeScript знал, что подставить на место обобщенного типа.
    class Base<T> {
      protected val: T;
    }
    
    class A extends Base<string> {
      methodA(): string {
        return this.val; // Ok, так как здесь val имеет тип string
      }
    }
    
    class B extends Base<number> {
      methodB(): number {
        return this.val; // тоже ok, так как здесь val имеет тип number
      }
    }
    Ответ написан
    8 комментариев
  • Как читать документацию по node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    на официальномй сайте, проматываю чуть ниже и вижу

    fs.writeFile(file, data[, options], callback)#
    History:
    • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
    • data
      <string> | <Buffer> | <TypedArray> | <DataView> | <Object>

    • options <Object> | <string>
      • encoding <string> | <null> Default: 'utf8'
      • mode <integer> Default: 0o666
      • flag <string> See support of file system flags. Default: 'w'.
      • signal <AbortSignal> allows aborting an in-progress writeFile

    • callback <Function>
      • err <Error> | <AggregateError>



    When file is a filename, asynchronously writes data to the file, replacing the file if it already exists. data can be a string or a buffer.

    When file is a file descriptor, the behavior is similar to calling fs.write() directly (which is recommended). See the notes below on using a file descriptor.

    The encoding option is ignored if data is a buffer.

    If data is a plain object, it must have an own (not inherited) toString function property.
    ...


    откуда следует что:
    первый параметр - это имя файла который нужно создать,
    второй параметр - это данные которые нужно записать,
    третий (необязательный) - это объект с опциями
    а четвертый (или третий если предыдущий параметр не был указан) - это коллбэк

    ЗЫ: уважаемый ТС, я понимаю что вопрос скорее всего был задан из-за вашей невнимательности, но тем не менее ответ вы получили, отметьте его решением)))

    Вот вам способ быстро найти информацию на странице:
    - открыв нужную страницу с большим объемом текста, перемотайте страницу в начала (до оглавления) и затем нажмите комбинацию кнопок CTRL+F (поиск по тексту страницы) и в появившемся окошке вбивайте искомый текст (в данном случае fs.write). После этого нужные пункты оглавления подсветятся желтым и вы легко найдете нужный.
    Ответ написан
    12 комментариев
  • Че он на элемент не нажимает?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ну короче типа внатуре getElementsByClassName возвращает как бы коллекцию элементов, а у коллекции, мамой клянусь, свойства childNodes нет.

    По секрету, братиш, вот: document.querySelector('.case-print')

    Ну там ещё дальше click работать не будет, но это уж самостоятельно в виде домашнего задания.
    Ответ написан
    Комментировать
  • Можно ли вставить два SSD в ноутбук?

    Можно. Нюанс - SSD должен поместиться
    Ответ написан
    Комментировать