Remapped accessor hotspot N=50
Mapped-type key remapping with accessor-like property surfaces.
tsz is 5.8x faster 163 lines 8 KB
Timing
Files
// Remapped mapped-type accessor hotspot benchmark.
// Exercises template-literal key remapping plus indexed access values.
interface AccessorModel {
prop0: { id: number; label: 'prop0' };
prop1: { id: number; label: 'prop1' };
prop2: { id: number; label: 'prop2' };
prop3: { id: number; label: 'prop3' };
prop4: { id: number; label: 'prop4' };
prop5: { id: number; label: 'prop5' };
prop6: { id: number; label: 'prop6' };
prop7: { id: number; label: 'prop7' };
prop8: { id: number; label: 'prop8' };
prop9: { id: number; label: 'prop9' };
prop10: { id: number; label: 'prop10' };
prop11: { id: number; label: 'prop11' };
prop12: { id: number; label: 'prop12' };
prop13: { id: number; label: 'prop13' };
prop14: { id: number; label: 'prop14' };
prop15: { id: number; label: 'prop15' };
prop16: { id: number; label: 'prop16' };
prop17: { id: number; label: 'prop17' };
prop18: { id: number; label: 'prop18' };
prop19: { id: number; label: 'prop19' };
prop20: { id: number; label: 'prop20' };
prop21: { id: number; label: 'prop21' };
prop22: { id: number; label: 'prop22' };
prop23: { id: number; label: 'prop23' };
prop24: { id: number; label: 'prop24' };
prop25: { id: number; label: 'prop25' };
prop26: { id: number; label: 'prop26' };
prop27: { id: number; label: 'prop27' };
prop28: { id: number; label: 'prop28' };
prop29: { id: number; label: 'prop29' };
prop30: { id: number; label: 'prop30' };
prop31: { id: number; label: 'prop31' };
prop32: { id: number; label: 'prop32' };
prop33: { id: number; label: 'prop33' };
prop34: { id: number; label: 'prop34' };
prop35: { id: number; label: 'prop35' };
prop36: { id: number; label: 'prop36' };
prop37: { id: number; label: 'prop37' };
prop38: { id: number; label: 'prop38' };
prop39: { id: number; label: 'prop39' };
prop40: { id: number; label: 'prop40' };
prop41: { id: number; label: 'prop41' };
prop42: { id: number; label: 'prop42' };
prop43: { id: number; label: 'prop43' };
prop44: { id: number; label: 'prop44' };
prop45: { id: number; label: 'prop45' };
prop46: { id: number; label: 'prop46' };
prop47: { id: number; label: 'prop47' };
prop48: { id: number; label: 'prop48' };
prop49: { id: number; label: 'prop49' };
}
type AccessorPair<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
} & {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void
};
declare const accessors: AccessorPair<AccessorModel>;
const accessorValue0 = accessors.getProp0().id;
accessors.setProp0({ id: accessorValue0, label: 'prop0' });
const accessorValue1 = accessors.getProp1().id;
accessors.setProp1({ id: accessorValue1, label: 'prop1' });
const accessorValue2 = accessors.getProp2().id;
accessors.setProp2({ id: accessorValue2, label: 'prop2' });
const accessorValue3 = accessors.getProp3().id;
accessors.setProp3({ id: accessorValue3, label: 'prop3' });
const accessorValue4 = accessors.getProp4().id;
accessors.setProp4({ id: accessorValue4, label: 'prop4' });
const accessorValue5 = accessors.getProp5().id;
accessors.setProp5({ id: accessorValue5, label: 'prop5' });
const accessorValue6 = accessors.getProp6().id;
accessors.setProp6({ id: accessorValue6, label: 'prop6' });
const accessorValue7 = accessors.getProp7().id;
accessors.setProp7({ id: accessorValue7, label: 'prop7' });
const accessorValue8 = accessors.getProp8().id;
accessors.setProp8({ id: accessorValue8, label: 'prop8' });
const accessorValue9 = accessors.getProp9().id;
accessors.setProp9({ id: accessorValue9, label: 'prop9' });
const accessorValue10 = accessors.getProp10().id;
accessors.setProp10({ id: accessorValue10, label: 'prop10' });
const accessorValue11 = accessors.getProp11().id;
accessors.setProp11({ id: accessorValue11, label: 'prop11' });
const accessorValue12 = accessors.getProp12().id;
accessors.setProp12({ id: accessorValue12, label: 'prop12' });
const accessorValue13 = accessors.getProp13().id;
accessors.setProp13({ id: accessorValue13, label: 'prop13' });
const accessorValue14 = accessors.getProp14().id;
accessors.setProp14({ id: accessorValue14, label: 'prop14' });
const accessorValue15 = accessors.getProp15().id;
accessors.setProp15({ id: accessorValue15, label: 'prop15' });
const accessorValue16 = accessors.getProp16().id;
accessors.setProp16({ id: accessorValue16, label: 'prop16' });
const accessorValue17 = accessors.getProp17().id;
accessors.setProp17({ id: accessorValue17, label: 'prop17' });
const accessorValue18 = accessors.getProp18().id;
accessors.setProp18({ id: accessorValue18, label: 'prop18' });
const accessorValue19 = accessors.getProp19().id;
accessors.setProp19({ id: accessorValue19, label: 'prop19' });
const accessorValue20 = accessors.getProp20().id;
accessors.setProp20({ id: accessorValue20, label: 'prop20' });
const accessorValue21 = accessors.getProp21().id;
accessors.setProp21({ id: accessorValue21, label: 'prop21' });
const accessorValue22 = accessors.getProp22().id;
accessors.setProp22({ id: accessorValue22, label: 'prop22' });
const accessorValue23 = accessors.getProp23().id;
accessors.setProp23({ id: accessorValue23, label: 'prop23' });
const accessorValue24 = accessors.getProp24().id;
accessors.setProp24({ id: accessorValue24, label: 'prop24' });
const accessorValue25 = accessors.getProp25().id;
accessors.setProp25({ id: accessorValue25, label: 'prop25' });
const accessorValue26 = accessors.getProp26().id;
accessors.setProp26({ id: accessorValue26, label: 'prop26' });
const accessorValue27 = accessors.getProp27().id;
accessors.setProp27({ id: accessorValue27, label: 'prop27' });
const accessorValue28 = accessors.getProp28().id;
accessors.setProp28({ id: accessorValue28, label: 'prop28' });
const accessorValue29 = accessors.getProp29().id;
accessors.setProp29({ id: accessorValue29, label: 'prop29' });
const accessorValue30 = accessors.getProp30().id;
accessors.setProp30({ id: accessorValue30, label: 'prop30' });
const accessorValue31 = accessors.getProp31().id;
accessors.setProp31({ id: accessorValue31, label: 'prop31' });
const accessorValue32 = accessors.getProp32().id;
accessors.setProp32({ id: accessorValue32, label: 'prop32' });
const accessorValue33 = accessors.getProp33().id;
accessors.setProp33({ id: accessorValue33, label: 'prop33' });
const accessorValue34 = accessors.getProp34().id;
accessors.setProp34({ id: accessorValue34, label: 'prop34' });
const accessorValue35 = accessors.getProp35().id;
accessors.setProp35({ id: accessorValue35, label: 'prop35' });
const accessorValue36 = accessors.getProp36().id;
accessors.setProp36({ id: accessorValue36, label: 'prop36' });
const accessorValue37 = accessors.getProp37().id;
accessors.setProp37({ id: accessorValue37, label: 'prop37' });
const accessorValue38 = accessors.getProp38().id;
accessors.setProp38({ id: accessorValue38, label: 'prop38' });
const accessorValue39 = accessors.getProp39().id;
accessors.setProp39({ id: accessorValue39, label: 'prop39' });
const accessorValue40 = accessors.getProp40().id;
accessors.setProp40({ id: accessorValue40, label: 'prop40' });
const accessorValue41 = accessors.getProp41().id;
accessors.setProp41({ id: accessorValue41, label: 'prop41' });
const accessorValue42 = accessors.getProp42().id;
accessors.setProp42({ id: accessorValue42, label: 'prop42' });
const accessorValue43 = accessors.getProp43().id;
accessors.setProp43({ id: accessorValue43, label: 'prop43' });
const accessorValue44 = accessors.getProp44().id;
accessors.setProp44({ id: accessorValue44, label: 'prop44' });
const accessorValue45 = accessors.getProp45().id;
accessors.setProp45({ id: accessorValue45, label: 'prop45' });
const accessorValue46 = accessors.getProp46().id;
accessors.setProp46({ id: accessorValue46, label: 'prop46' });
const accessorValue47 = accessors.getProp47().id;
accessors.setProp47({ id: accessorValue47, label: 'prop47' });
const accessorValue48 = accessors.getProp48().id;
accessors.setProp48({ id: accessorValue48, label: 'prop48' });
const accessorValue49 = accessors.getProp49().id;
accessors.setProp49({ id: accessorValue49, label: 'prop49' });