• Для чего setTimeout возвращает разные типы?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    В Node.js setTimeout имеет иную сигнатуру. Если не используете node.js - исключите её типы из tsconfig. Ну или пишите wimdow.setTimeout как советовали в комментах, тем самым указывая на объект window который есть только в браузере.
    Ответ написан
  • Не удается найти модуль "./App.vue" или связанные с ним объявления типов. Vue.js 3 и TypeScript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Стандартная какашка, которая идёт в комплекте с любым готовым пресетом, файлик vue.d.ts с содержимым:
    declare module '*.vue' {
      import type { DefineComponent } from 'vue';
      const component: DefineComponent<{}, {}, any>;
      export default component;
    }
    Ответ написан
    Комментировать
  • Почему гиперссылка дублирует адрес?

    Aetae
    @Aetae
    Тлен
    href="AD" -> href="/ad"
    Без косой черты - путь относительно текущего.
    Ну и регистр имеет значение(не всегда, но может неприятно удивить).
    Ответ написан
    Комментировать
  • Как с помощью регулярного выражения найти вторую папку в конкретном формате?

    Aetae
    @Aetae
    Тлен
    /(?<=\/)[a-z]{2}(?:_[a-z]{2})?(?=\/[^/]+\/?$)/

    Как для этого написать регулярное выражение?

    Изучить регулярные выражения и написать.
    Ответ написан
    Комментировать
  • Почему ругается Vscode на типы?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ну потому что это union - он строгий, он позволяет получать свойство напрямую только в том случае, если оно есть у всех членов union'а. В ином случае надо руками делать проверку, которая сузит тип до нужного. if ('counter' in ...) и т.п.
    Ответ написан
    Комментировать
  • Можно ли заменить javascript языком dart/flutter?

    Aetae
    @Aetae
    Тлен
    Если заменить кривой язык для которого за годы и годы работы написали столько костылей, что они уже сложились в более-менее стабильный и устойчивый фундамент, на свежие кривые хипстерские языки от той же тусовки, то всё конечно станет стабильно.
    *сарказм.жпг*

    Ну и интересно, что у тебя там меняется, обратная совместимость в js практически абсолютна. Если ничего не трогать - ничего не сломается.
    Ответ написан
    Комментировать
  • Как удалить параметр по значению?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если используешь функции из моего предыдущего ответа, то вот те дополнительные:

    // удаляет значение
    function removeFieldValue(previous, value) {
      if (!previous)
        return '';
      if (typeof value !== 'string')
        value = String(value);
    
      const uniqueValues = splitFieldValues(previous);
      uniqueValues.delete(value.trim());
    
      return [...uniqueValues].join(' ');
    }
    
    // удаляет значение по его порядковому номеру
    function removeFieldValueByIndex(previous, index) {
      if (!previous)
        return '';
    
      const uniqueValues = [...splitFieldValues(previous)];
      uniqueValues.splice(index, 1);
    
      return uniqueValues.join(' ');
    }


    Но всю программу ты чисто на вопросах не напишешь. (Нет, не напишешь.)
    Ответ написан
    Комментировать
  • Как-то можно сохранить таблицу excel в максимально упрощенном интерфейсе?

    Aetae
    @Aetae
    Тлен
    Вот jscript который откроет в таком виде файл name.xlsx из той же папки:

    name.xlsx_open.js
    var filePath = getFilePath("name.xlsx");
    
    var excelApp = new ActiveXObject("Excel.Application");
    
    excelApp.DisplayAlerts = false;
    excelApp.DisplayClipboardWindow = false;
    excelApp.DisplayCommentIndicator = false;
    excelApp.DisplayDocumentInformationPanel = false;
    excelApp.DisplayExcel4Menus = false;
    excelApp.DisplayFormulaAutoComplete = false;
    excelApp.DisplayFormulaBar = false;
    excelApp.DisplayFullScreen = false;
    excelApp.DisplayFunctionToolTips = false;
    excelApp.DisplayInsertOptions = false;
    excelApp.DisplayNoteIndicator = false;
    excelApp.DisplayPasteOptions = false;
    excelApp.DisplayRecentFiles = false;
    excelApp.DisplayScrollBars = false;
    excelApp.DisplayStatusBar = false;
    excelApp.ShowChartTipNames = false;
    excelApp.ShowChartTipValues = false;
    excelApp.ShowDevTools = false;
    excelApp.ShowMenuFloaties = false;
    excelApp.ShowQuickAnalysis = false;
    excelApp.ShowSelectionFloaties = false;
    excelApp.ShowStartupDialog = false;
    excelApp.ShowToolTips = false;
    
    excelApp.Visible = true;
    
    excelApp.ExecuteExcel4Macro('SHOW.TOOLBAR("Ribbon", False)');
    
    var workbook = excelApp.Workbooks.Open(filePath);
    var worksheet = workbook.Worksheets(1);
    
    worksheet.Activate(); 
    
    worksheet.Application.ActiveWindow.DisplayFormulas = false;
    worksheet.Application.ActiveWindow.DisplayHeadings = false;
    worksheet.Application.ActiveWindow.DisplayHorizontalScrollBar = false;
    worksheet.Application.ActiveWindow.DisplayOutline = false;
    worksheet.Application.ActiveWindow.DisplayRightToLeft = false;
    worksheet.Application.ActiveWindow.DisplayRuler = false;
    worksheet.Application.ActiveWindow.DisplayVerticalScrollBar = false;
    worksheet.Application.ActiveWindow.DisplayWhitespace = false;
    worksheet.Application.ActiveWindow.DisplayWorkbookTabs = false;
    worksheet.Application.ActiveWindow.DisplayZeros = false;
    
    worksheet.Application.ActiveWindow.Zoom = true;
    worksheet.Application.ActiveWindow.Zoom = 100;
    
    function getFilePath(fileName) {
      var fso = new ActiveXObject('Scripting.FileSystemObject');
      return fso.GetAbsolutePathName('.\\' + fileName);
    }

    Скорее всего это легко можно преобразовать в макрос, но это я оставлю энтузиастам.)

    Ну и в целом это так - баловство.)
    Ответ написан
    Комментировать
  • Микроразметка в чем ошибка?

    Aetae
    @Aetae
    Тлен
    Предположу что эта штука тупая и не умет смотреть на type элемента script, а потому считает любой script - javascript, а потому ругается на голый объект без присваивания переменной.
    Ответ написан
  • Как синхронизировать клиентскую и серверную часть сайта?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Верить клиенту конечно нельзя, но можно сделать вид что веришь:
    1. рассчитывай число и на клиенте и на сервере.
    2. в начале расчёта один раз синхронизируй с сервером.
    3. выводи рассчитываемое на клиенте число с какой угодно плавностью.
    4. если синхронизация прям очень важна - продолжай слать число с сервера и сравнивать с клиентом, если разница в пределах (заданной) погрешности - ничего не делай, еслы вышла за пределы - меняй клиентское(ничего страшного если такое будет происходить изредка).
    5. если сама по себе синхронизация не особо важна, а важно лишь конечно число, то собственно сравнивай клиентское с серверным только в самом конце. Если совпало (с погрешностью в нужную сторону) - всё ок. Не совпало - клиент хацкер - идёт нафиг.

    У любого нормального клиента всё всегда будет совпадать, мегаредкие исключения со сломанными системными часами в любом случае будут баговать, а хацкеры нам и не нужны.
    Ответ написан
    Комментировать
  • Как добавить в results свои данные?

    Aetae
    @Aetae
    Тлен
    results.unshift({ id: 0, text: 'Без категории' });

    Object.assign - работает как называется: assign, не add, append, push или ещё как-то. Он присваивает первому аргументу ключи второго(т.е. перезаписывает, если такие у присутствуют). В случае массива ключом является индекс.
    Ответ написан
    1 комментарий
  • Чем анализировать расход трафика на windows в фоне?

    Aetae
    @Aetae
    Тлен
    В win 10 есть встроенный монитор, мб тебе его хватит:
    Праметры > Сеть и интернет -> Состояние -> Использование -> Использование данных
    wsi-imageoptim-LSGPkIsQGg6kIgNn1Vxp.jpg
    Ответ написан
    Комментировать
  • Как использовать TypeScript в существующем проекте Strapi?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Typescript тут не при чём, ошибка у тебя в рантайме, когда никакого тайпскрипта уже нет.
    В чём ошибка - написано у тебя прямо в консоли. Но если способность читать у тебя работает только на форумах, растолкую:
    Strapi пытается прочитать поле routes у несуществующего(undefined) объекта. Почитай документацию и найди куда ты там должен положить какие-то routes.
    Ответ написан
    4 комментария
  • Как исправить ошибку сборки?

    Aetae
    @Aetae
    Тлен
    Вангую используется ?., а у пользователя старый фокс.
    Решение - настроить browserslist в своей сборке по ожидаемой клиентуре. Если нужна поддержка - добавить >N вместо last 1 который там наверняка по дефалту.
    Ответ написан
    Комментировать
  • Как добавить параметры в query?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Нужна - сделайте. Это элементарный javascript, vue тут не при чём.
    типа этого
    function concatenateFieldValue(previous, value) {
      if (typeof value !== 'string')
        value = String(value);
      if (!previous)
        return value;
    
      const uniqueValues = splitFieldValues(previous);
      uniqueValues.add(value.trim());
    
      return [...uniqueValues].join(' ');
    }
    
    function splitFieldValues(values) {
      return new Set(values.split(' ').filter(Boolean));
    }
    
    function getUpdatedQuery(query, field, value) {
      return {
        ...query,
        [field]: concatenateFieldValue(query[field], value)
      }
    }
    
    
    this.$router.push({
      query: getUpdatedQuery(
        this.$route.query, 
        itemNameParent, 
        e.target.value
      )
    });
    Ответ написан
    Комментировать
  • Почему селектор :not не срабатывает первый раз?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Потому что селектор div.filtr form ul li:not(.sf-field-sort_order) выбирает все li(кроме .sf-field-sort_order) которые находятся внутри div.filtr form ul, т.е. и <li>тест</li> в том числе. Если тебе нужны только прямые потомки, то надо писать так:
    div.filtr > form > ul > li:not(.sf-field-sort_order)
    и тогда всё будет работать как ты задумывал.
    Ответ написан
    Комментировать
  • Как выполнить запрос н-раз?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
    
    const request = () => fetch('https://your-request-url.ru')
    	.then(response => response.json())
      .then(console.log);
    
    async function repeat(request, interval = 5000, times = Infinity) {
      do {
        await request();
        
        if (--times < 1) break;
        
        await delay(interval);
        
      } while (true);
    }
    
    repeat(request, 5000, 5)
    Ответ написан
    Комментировать
  • Как оставить цвет текста при переключении языка на сайте?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Сделать октоторп элементом стиля, а не частью слова:
    .nav-link::before {
        content: '#';
        font-weight: bold;
        color: #f0f;
    }
    Ответ написан
    1 комментарий
  • Как изменить параметр в about:config через браузерное расширение?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Низя. WebExtensions рождены убогими, ничего не поделаешь.
    Если "одобренный" набор настроек, которые под капотом меняют как раз конфиг, но это фигня.
    Ответ написан
  • Как повторно вызвать скрипт (ready()), которые подгружается динамически?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Конкретизировать на что именно он вешает обработчики.
    Не $('.button').click(...) который повесит на все .button на странице - и старые и новые, а $(container).find('.button').click(...), где container - родительский элемент нового добавляемого блока.
    Ответ написан