Mapped type keys=450
tsz is 1.4x faster 481 lines 10 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;
prop300: string;
prop301: string;
prop302: string;
prop303: string;
prop304: string;
prop305: string;
prop306: string;
prop307: string;
prop308: string;
prop309: string;
prop310: string;
prop311: string;
prop312: string;
prop313: string;
prop314: string;
prop315: string;
prop316: string;
prop317: string;
prop318: string;
prop319: string;
prop320: string;
prop321: string;
prop322: string;
prop323: string;
prop324: string;
prop325: string;
prop326: string;
prop327: string;
prop328: string;
prop329: string;
prop330: string;
prop331: string;
prop332: string;
prop333: string;
prop334: string;
prop335: string;
prop336: string;
prop337: string;
prop338: string;
prop339: string;
prop340: string;
prop341: string;
prop342: string;
prop343: string;
prop344: string;
prop345: string;
prop346: string;
prop347: string;
prop348: string;
prop349: string;
prop350: string;
prop351: string;
prop352: string;
prop353: string;
prop354: string;
prop355: string;
prop356: string;
prop357: string;
prop358: string;
prop359: string;
prop360: string;
prop361: string;
prop362: string;
prop363: string;
prop364: string;
prop365: string;
prop366: string;
prop367: string;
prop368: string;
prop369: string;
prop370: string;
prop371: string;
prop372: string;
prop373: string;
prop374: string;
prop375: string;
prop376: string;
prop377: string;
prop378: string;
prop379: string;
prop380: string;
prop381: string;
prop382: string;
prop383: string;
prop384: string;
prop385: string;
prop386: string;
prop387: string;
prop388: string;
prop389: string;
prop390: string;
prop391: string;
prop392: string;
prop393: string;
prop394: string;
prop395: string;
prop396: string;
prop397: string;
prop398: string;
prop399: string;
prop400: string;
prop401: string;
prop402: string;
prop403: string;
prop404: string;
prop405: string;
prop406: string;
prop407: string;
prop408: string;
prop409: string;
prop410: string;
prop411: string;
prop412: string;
prop413: string;
prop414: string;
prop415: string;
prop416: string;
prop417: string;
prop418: string;
prop419: string;
prop420: string;
prop421: string;
prop422: string;
prop423: string;
prop424: string;
prop425: string;
prop426: string;
prop427: string;
prop428: string;
prop429: string;
prop430: string;
prop431: string;
prop432: string;
prop433: string;
prop434: string;
prop435: string;
prop436: string;
prop437: string;
prop438: string;
prop439: string;
prop440: string;
prop441: string;
prop442: string;
prop443: string;
prop444: string;
prop445: string;
prop446: string;
prop447: string;
prop448: string;
prop449: 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;