mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-02 08:35:07 +08:00
Represent ordinary JavaScript arrays with hole, value, and explicit-undefined states; add sparse side storage and carry missing values through the frontend, native backends, runtime, and Node-facing consumers.
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
// With unchecked indexed access, TypeScript's annotation is not a proof
|
|
// that a JavaScript array read produced a value.
|
|
function inspectNumber(value: number): string {
|
|
return `${typeof value}:${value}:${value + 1}`;
|
|
}
|
|
|
|
function readNumber(values: number[], index: number): number {
|
|
return values[index];
|
|
}
|
|
|
|
function forwardNumber(value: number): number {
|
|
return value;
|
|
}
|
|
|
|
function describeForwarded(value: number): string {
|
|
return inspectNumber(forwardNumber(value));
|
|
}
|
|
|
|
const values: number[] = [8];
|
|
const missing = values[3];
|
|
console.log("local", typeof missing, missing, missing + 1);
|
|
console.log("argument", inspectNumber(missing));
|
|
console.log("return", inspectNumber(readNumber(values, 3)));
|
|
console.log("forwarded", describeForwarded(missing));
|
|
const box: { value: number } = { value: missing };
|
|
console.log("field", inspectNumber(box.value));
|
|
|
|
function shorten(input: number[]): void {
|
|
input.pop();
|
|
}
|
|
|
|
if (values.length > 0) {
|
|
shorten(values);
|
|
console.log("after-alias-mutation", inspectNumber(values[0]));
|
|
}
|