Files
scriptc/tests/corpus/rest-optional-array-arguments.ts
Chris Tate 9d30b56c6b Speed up compiler startup and trim release runtime packs
- Cache host libc detection and load TypeScript 5 only when needed.
- Exclude debug payloads from release runtime packs and vendor archives.
- Preserve native self-hosting, portable diagnostics, and reliable Sandbox execution.
2026-09-29 21:41:39 -05:00

51 lines
1.6 KiB
TypeScript

// Unchecked array reads widen rest elements while the rest array stays present.
class Collector {
first(...values: number[]): string {
return values.map(value => value === undefined ? "missing" : String(value)).join(",");
}
later(prefix: string, ...values: number[]): string {
return prefix + values.map(value => value === undefined ? "missing" : String(value)).join(",");
}
}
const items: number[] = [7];
const collector = new Collector();
console.log(collector.first(items[3]));
console.log(collector.first());
console.log(collector.first(...items));
console.log(collector.later("values:", 1, items[3], 2));
console.log(collector.later("empty:"));
function collect(...values: number[]): string {
return values.map(value => value === undefined ? "missing" : String(value)).join(",");
}
console.log(collect(1, items[3], 2));
console.log(collect());
class Base {
describe(...values: number[]): string {
return "base:" + values.map(value => value === undefined ? "missing" : String(value)).join(",");
}
}
class Derived extends Base {
describe(...values: number[]): string {
return "derived:" + values.map(value => value === undefined ? "missing" : String(value)).join(",");
}
}
function describe(receiver: Base): string {
return receiver.describe(1, items[3], 2);
}
console.log(describe(new Base()));
console.log(describe(new Derived()));
interface Node { marked?: boolean }
class Gate {
blocked(...nodes: Node[]): boolean {
return nodes.some(node => node?.marked === true);
}
}
const nodes: Node[] = [{ marked: true }];
const gate = new Gate();
console.log(gate.blocked(nodes[3]), gate.blocked(nodes[0]!), gate.blocked());