Uncaught TypeError: [1,2,3] is not a function
let map = [1, 2, 3](async () => {
console.log(map)
})()
randomInteger(1,6)
const cards = [6, 7, 8, 9, 10, 11];
function randomArrayElement(array) {
return array[Math.floor(Math.random() * array.length)];
}
function blackjack() {
let sum = 0;
while (sum < 22) {
sum += randomArrayElement(cards);
alert(`Ваше число на данный момент ${sum}`);
if (!confirm('Возьмете еще?')) {
alert(`Вы спасовали ваше число ${sum}`);
return;
}
}
alert(`Вы проиграли ваше число ${sum}`);
}
blackjack();
function loop(step: number) {
for (let i = 0; i < 100; i += step)
console.log(i);
}
В данном коде нет ошибки, ошибка в другом месте. Typescript вообще не меняет логику в выходном javacript. Я бы поискал другие места, где Вы вызываете эту функцию. Где-то Вы передаете в нее строку, убедив typescript через оператор as, что это число.type InferValueTypes<T> = T extends { [key: string]: infer IDontKnowWhat2CallThis } ? IDontKnowWhat2CallThis : never
type InferValueTypes<T extends Record<string, unknown>> = T[string];
// весь 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;