Mapped type keys=100
Mapped-type and property traversal behavior in the solver.
tsz is 6.2x faster 131 lines 2 KB
Timing
Files
// Mapped type expansion stress test
// Tests MAX_MAPPED_KEYS limit and mapped type evaluation
type MyOptional<T> = { [K in keyof T]?: T[K] };
type MyRequired<T> = { [K in keyof T]-?: T[K] };
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
type MyMutable<T> = { -readonly [K in keyof T]: T[K] };
// Advanced mapped types
type Getters<T> = { [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K] };
type Setters<T> = { [K in keyof T as `set${Capitalize<string & K>}`]: (val: T[K]) => void };
interface BigObject {
prop0: string;
prop1: string;
prop2: string;
prop3: string;
prop4: string;
prop5: string;
prop6: string;
prop7: string;
prop8: string;
prop9: string;
prop10: string;
prop11: string;
prop12: string;
prop13: string;
prop14: string;
prop15: string;
prop16: string;
prop17: string;
prop18: string;
prop19: string;
prop20: string;
prop21: string;
prop22: string;
prop23: string;
prop24: string;
prop25: string;
prop26: string;
prop27: string;
prop28: string;
prop29: string;
prop30: string;
prop31: string;
prop32: string;
prop33: string;
prop34: string;
prop35: string;
prop36: string;
prop37: string;
prop38: string;
prop39: string;
prop40: string;
prop41: string;
prop42: string;
prop43: string;
prop44: string;
prop45: string;
prop46: string;
prop47: string;
prop48: string;
prop49: string;
prop50: string;
prop51: string;
prop52: string;
prop53: string;
prop54: string;
prop55: string;
prop56: string;
prop57: string;
prop58: string;
prop59: string;
prop60: string;
prop61: string;
prop62: string;
prop63: string;
prop64: string;
prop65: string;
prop66: string;
prop67: string;
prop68: string;
prop69: string;
prop70: string;
prop71: string;
prop72: string;
prop73: string;
prop74: string;
prop75: string;
prop76: string;
prop77: string;
prop78: string;
prop79: string;
prop80: string;
prop81: string;
prop82: string;
prop83: string;
prop84: string;
prop85: string;
prop86: string;
prop87: string;
prop88: string;
prop89: string;
prop90: string;
prop91: string;
prop92: string;
prop93: string;
prop94: string;
prop95: string;
prop96: string;
prop97: string;
prop98: string;
prop99: string;
}
// Mapped type transformations
type Partial1 = MyOptional<BigObject>;
type Readonly1 = MyReadonly<BigObject>;
type Both = MyReadonly<MyOptional<BigObject>>;
type BigGetters = Getters<BigObject>;
type BigSetters = Setters<BigObject>;
// Nested mapped type
type DeepOptional<T> = T extends object ? { [K in keyof T]?: DeepOptional<T[K]> } : T;
type DeepBigObject = DeepOptional<BigObject>;
declare const partial: Partial1;
declare const getters: BigGetters;
declare const deep: DeepBigObject;
const _prop0 = partial.prop0;