Mapped type keys=300
tsz is 1.5x faster 331 lines 7 KB
Timing
Files
// Mapped type expansion stress test
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] };
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;
prop100: string;
prop101: string;
prop102: string;
prop103: string;
prop104: string;
prop105: string;
prop106: string;
prop107: string;
prop108: string;
prop109: string;
prop110: string;
prop111: string;
prop112: string;
prop113: string;
prop114: string;
prop115: string;
prop116: string;
prop117: string;
prop118: string;
prop119: string;
prop120: string;
prop121: string;
prop122: string;
prop123: string;
prop124: string;
prop125: string;
prop126: string;
prop127: string;
prop128: string;
prop129: string;
prop130: string;
prop131: string;
prop132: string;
prop133: string;
prop134: string;
prop135: string;
prop136: string;
prop137: string;
prop138: string;
prop139: string;
prop140: string;
prop141: string;
prop142: string;
prop143: string;
prop144: string;
prop145: string;
prop146: string;
prop147: string;
prop148: string;
prop149: string;
prop150: string;
prop151: string;
prop152: string;
prop153: string;
prop154: string;
prop155: string;
prop156: string;
prop157: string;
prop158: string;
prop159: string;
prop160: string;
prop161: string;
prop162: string;
prop163: string;
prop164: string;
prop165: string;
prop166: string;
prop167: string;
prop168: string;
prop169: string;
prop170: string;
prop171: string;
prop172: string;
prop173: string;
prop174: string;
prop175: string;
prop176: string;
prop177: string;
prop178: string;
prop179: string;
prop180: string;
prop181: string;
prop182: string;
prop183: string;
prop184: string;
prop185: string;
prop186: string;
prop187: string;
prop188: string;
prop189: string;
prop190: string;
prop191: string;
prop192: string;
prop193: string;
prop194: string;
prop195: string;
prop196: string;
prop197: string;
prop198: string;
prop199: string;
prop200: string;
prop201: string;
prop202: string;
prop203: string;
prop204: string;
prop205: string;
prop206: string;
prop207: string;
prop208: string;
prop209: string;
prop210: string;
prop211: string;
prop212: string;
prop213: string;
prop214: string;
prop215: string;
prop216: string;
prop217: string;
prop218: string;
prop219: string;
prop220: string;
prop221: string;
prop222: string;
prop223: string;
prop224: string;
prop225: string;
prop226: string;
prop227: string;
prop228: string;
prop229: string;
prop230: string;
prop231: string;
prop232: string;
prop233: string;
prop234: string;
prop235: string;
prop236: string;
prop237: string;
prop238: string;
prop239: string;
prop240: string;
prop241: string;
prop242: string;
prop243: string;
prop244: string;
prop245: string;
prop246: string;
prop247: string;
prop248: string;
prop249: string;
prop250: string;
prop251: string;
prop252: string;
prop253: string;
prop254: string;
prop255: string;
prop256: string;
prop257: string;
prop258: string;
prop259: string;
prop260: string;
prop261: string;
prop262: string;
prop263: string;
prop264: string;
prop265: string;
prop266: string;
prop267: string;
prop268: string;
prop269: string;
prop270: string;
prop271: string;
prop272: string;
prop273: string;
prop274: string;
prop275: string;
prop276: string;
prop277: string;
prop278: string;
prop279: string;
prop280: string;
prop281: string;
prop282: string;
prop283: string;
prop284: string;
prop285: string;
prop286: string;
prop287: string;
prop288: string;
prop289: string;
prop290: string;
prop291: string;
prop292: string;
prop293: string;
prop294: string;
prop295: string;
prop296: string;
prop297: string;
prop298: string;
prop299: string;
}
type Partial1 = MyOptional<BigObject>;
type Readonly1 = MyReadonly<BigObject>;
type Both = MyReadonly<MyOptional<BigObject>>;
type BigGetters = Getters<BigObject>;
type BigSetters = Setters<BigObject>;
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;