function getSkills(params: TGetSkills['requestParams']): TGetSkills['response'];
function getSkills(params: TGetSkillsWithCriterions['requestParams']): TGetSkillsWithCriterions['response'];
function getSkills(
params: (TGetSkills | TGetSkillsWithCriterions)['requestParams'],
) {
return instance.get<(TGetSkills | TGetSkillsWithCriterions)['response']>('url', {
params: params,
}),
}
getSkills: getSkills
const cancelable = fn => { // Создаётся функция cancelable, которая принимает функцию и сохраняет в переменную fn
const wrapper = (...args) =>{ // Создаётся функция-обёртка, которая принимает любой набор аргументов
if(fn) return fn(...args) // Если в cancelable была передана функция, то вызывает её с необходимыми аргументами
}
wrapper.cancel = () => fn = null // Добавляет свойство во wrapper для очистки переменной fn
return wrapper // Возвращает обёртку
}
const fn = par =>{ // Функция, которая оборачивается в декоратор со своим аргументом
console.log('Function called, par:',par)
}
const f = cancelable(fn) // Создаёт обёртку вокруг fn
f('first') // Function called, par: first
f.cancel() // fn является переменной внутри cancelable, здесь мы её обнуляем
f('second') // Ничего не выводит, потому что условие у wrapper отрабатывает, только если функция есть
type A = { text: string, icon: never }
type B = { text: never, icon: string }
type ExclusiveOr_Array = (A | B)[]
background: repeating-linear-gradient(
-45deg,
rgb(109, 118, 232),
rgb(109, 118, 232) 10px,
rgb(73, 84, 226) 10px,
rgb(73, 84, 226) 20px
);
const wrapper = () => {
const $$$ = {
get activatedFilters() {
return document.querySelectorAll(".chose");
}
}
a.addEventListener("click", () => {
// делает что-то с $$$.activatedFilters
}
b.addEventListener("click", () => {
// делает что-то другое с $$$.activatedFilters
}
}
const wrapper = () => {
const getActivatedFilters = () => document.querySelectorAll(".chose");
a.addEventListener("click", () => {
// делает что-то с getActivatedFilters()
}
b.addEventListener("click", () => {
// делает что-то другое с getActivatedFilters()
}
}
// тут let $activatedFilters = document.querySelectorAll(".chose");
const wrapper = ()=>{
// или тут let $activatedFilters = document.querySelectorAll(".chose");
a.addEventListener("click", () => {
/*-- делает что-то --*/
}
b.addEventListener("click", () => {
/*-- делает что-то --*/
}
}
.chose
то вынесение переменной в вышестоящую область видимости даст не корректный результат, так как в переменную сохранится тот набор элементов, который будет в DOM на момент инициализации переменной, а не вызова функций-обработчиков событий..chose
, скажем в переменную choseCont
. И тогда в функциях обработчках уже обращаться не к document.querySelectorAll
а к choseCont.querySelectorAll
, что значительно ускорит поиск по DOM, так как будем искать не во всём дереве, а лишь в определённом элементе.$activatedFilters
правильнее использовать const
а не let
. Если только Вы где-то ниже в коде не переопределяете саму переменную $activatedFilters
return [...el].map((n) => new Select(n));
Select
на this.constructor
. arr.reduce((acc, [[key], [value]]) => {
if(acc[acc.length - 1]?.[1] === value) {
acc[acc.length - 1][0][1] = key;
}
else {
acc.push([[key], value]);
}
return acc;
}, []).map(([keys, value]) => `${keys.join('-')} : ${value}`)