// весь event-loop
while (true) {
// цикл микротасок:
while (!microtaskQueue.isEmpty) {
microtaskQueue.runNext();
}
if (!macrotaskQueue.isEmpty) {
macrotaskQueue.runNext()
}
}
Как видно из этого псевдокода, очередь микротасков будет выполнятся пока она не закончится, а очередь макротасков будет выполнять по 1 таске на итерацию event-loop. Соответственно, если в микротаске добавить в очередь еще одну микротаску, то она выполнится на той же итерации event-loop до того как управление перейдет к макротаскам.function microtaskBomb() {
return Promise.resolve().then(microtaskBomb);
}
...
) оператора), и оптимизатор знает об этом сахаре. У Map есть только его методы, с которыми оптимизатор может сделать не так уж и много (так как некоторые оптимизации не применимы к динамическому диспатчингу, ибо ведут к UB, а JS - язык с гарантированным отсутствием UB) () => void
является потомком типа (param: any) => void
, а значит Ваш предикат в типе A становится истинным и уходит в ветку, где Вы возвращаете R из infer, который выводится к вершине иерархии - типу unknowntype A<T> = T extends (...param: infer P) => void
? P extends [infer R, ...unknown[]]
? R
: string
: string;
const im = document.querySelector('.im')
im.onclick = () => {
if (im.src.endsWith('img/sunny.png')) {
im.src = 'img/moon.png';
console.log(im.src)
} else {
im.src = 'img/sunny.png';
}
}
Ну а вообще лучше просто в отдельную переменную завести состояние и проверять его export const TypographyType = {
[TypographyTypeStyle.h1]: 'h1',
[TypographyTypeStyle.h2]: 'h2',
[TypographyTypeStyle.h3]: 'h3',
[TypographyTypeStyle.h4]: 'h4',
[TypographyTypeStyle.p1]: 'p',
[TypographyTypeStyle.p2]: 'p',
} as const;
type TestResult<T extends string[] | CustomClass[]> = T extends CustomClass[] ? T : void;
function test<T extends string[] | CustomClass[]>(data: T): TestResult<T> {
if (data[0] instanceof CustomClass) {
return data as TestResult<T>;
}
return undefined as TestResult<T>;
}
const m = matchMedia('(min-width: 1000px)');
m.addListener(() => {
// Ваш скрипт тут
});
Ctrl+Shift+P
или Cmd+Shift+P
на маке)workbench.action.editor.changeLanguageMode
и по умолчанию к ней уже привязано сочетание Ctrl+K M
(сначала нажимаете Ctrl+K
и потом сразу M
), но Вы конечно же можете его сменить