Remapped accessor hotspot N=50

Mapped-type key remapping with accessor-like property surfaces.

tsz is 5.8x faster 163 lines 8 KB

Timing

tsz
64.11ms
tsgo
372.92ms

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' });