Files
scriptc/tests/corpus/local-class-unknown.ts
Chris Tate 31332427b6 Compile local class factories and spread calls natively
- Preserve fresh constructor identity and shared captures across local class instances.
- Carry constructors through unknown values without a JavaScript engine.
- Support runtime-length spreads into fixed and rest parameters.
2026-09-28 20:11:25 -05:00

33 lines
1.1 KiB
TypeScript

import assert from "node:assert/strict";
function make(value: number) {
return class Stored {
constructor(extra: number = 0) { value += extra; }
read(): number { return value; }
};
}
const A = make(12);
const B = make(25);
const one: unknown = A;
const again: unknown = A;
const two: unknown = B;
console.log(typeof one, one === again, one === two);
assert.strictEqual(one, again);
assert.notStrictEqual(one, two);
assert.deepStrictEqual(one, again);
const properties = one as Record<string, unknown>;
console.log(properties.name, properties.length);
const Restored = one as typeof A;
console.log(new Restored(2).read(), new B().read());
const call = one as () => void;
try { call(); } catch (error) { console.log((error as Error).name, (error as Error).message); }
class Top { constructor(first: number, second = 0) {} }
const top: unknown = Top;
const topProperties = top as Record<string, unknown>;
console.log(topProperties.name, topProperties.length);
const Saved = top as typeof Top;
const saved = new Saved(1);
console.log(saved instanceof Top);
const list: unknown = [A, B];
console.log(JSON.stringify(list));