0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

setTimeout's params should not be bigint (#2834)

This commit is contained in:
迷渡 2019-08-29 22:57:09 +08:00 committed by Ryan Dahl
parent b5a5e97384
commit 590463bd4a
2 changed files with 23 additions and 0 deletions

View file

@ -179,6 +179,12 @@ function checkThis(thisArg: unknown): void {
}
}
function checkBigInt(n: unknown): void {
if (typeof n === "bigint") {
throw new TypeError("Cannot convert a BigInt value to a number");
}
}
function setTimer(
cb: (...args: Args) => void,
delay: number,
@ -224,6 +230,7 @@ export function setTimeout(
delay: number = 0,
...args: Args
): number {
checkBigInt(delay);
// @ts-ignore
checkThis(this);
return setTimer(cb, delay, args, false);
@ -235,6 +242,7 @@ export function setInterval(
delay: number = 0,
...args: Args
): number {
checkBigInt(delay);
// @ts-ignore
checkThis(this);
return setTimer(cb, delay, args, true);

View file

@ -244,6 +244,21 @@ test(async function clearTimeoutShouldConvertToNumber(): Promise<void> {
assert(called);
});
test(function setTimeoutShouldThrowWithBigint(): void {
let hasThrown = 0;
try {
setTimeout((): void => {}, (1n as unknown) as number);
hasThrown = 1;
} catch (err) {
if (err instanceof TypeError) {
hasThrown = 2;
} else {
hasThrown = 3;
}
}
assertEquals(hasThrown, 2);
});
test(function testFunctionName(): void {
assertEquals(clearTimeout.name, "clearTimeout");
assertEquals(clearInterval.name, "clearInterval");