mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-02 08:35:07 +08:00
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
// Empty binding patterns in DECLARATIONS over statically non-nullish
|
|
// sources: `var {} = e` / `const {} = e` is RequireObjectCoercible and
|
|
// nothing else — a pure no-op past the source's own evaluation, for
|
|
// records and non-records alike (arrays, numbers boxed by the checker's
|
|
// type... anything the static types prove coercible). For-of heads take
|
|
// the same rule per element; the empty ARRAY pattern over an array
|
|
// source consumes nothing. Sources still evaluate exactly once.
|
|
let evals = 0;
|
|
function src(): { a: number } { evals++; return { a: 1 }; }
|
|
var {} = src();
|
|
let {} = src();
|
|
const {} = src();
|
|
console.log("evals", evals);
|
|
// Empty object pattern over a NON-RECORD static source (the trio's
|
|
// `for (var {} of ns)` shape — number[][] elements).
|
|
const ns: number[][] = [[1], [2, 3]];
|
|
var arrs = 0;
|
|
for (var {} of ns) arrs++;
|
|
for (let {} of ns) arrs++;
|
|
for (const {} of ns) arrs++;
|
|
console.log("arrs", arrs);
|
|
for (var [] of ns) arrs++;
|
|
for (const [] of ns) arrs++;
|
|
console.log("arrs", arrs);
|
|
const nums: number[] = [7, 8, 9];
|
|
var {} = nums;
|
|
const {} = nums;
|
|
console.log("done", evals);
|