diff --git a/implementations/javascript/packages/core/src/record.ts b/implementations/javascript/packages/core/src/record.ts index eb94f0a..7a53b2c 100644 --- a/implementations/javascript/packages/core/src/record.ts +++ b/implementations/javascript/packages/core/src/record.ts @@ -20,6 +20,7 @@ export interface RecordConstructor, Fs, Names extends Tuple; isClassOf(v: any): v is Record, T>; _: RecordGetters, T>>; + fieldNumbers: { [K in string & keyof Fs]: number }; }; export interface RecordConstructorInfo, T = GenericEmbedded> { @@ -74,8 +75,12 @@ export namespace Record { const constructorInfo = { label, arity: fieldNames.length }; ctor.constructorInfo = constructorInfo; ctor.isClassOf = (v: any): v is Record, T> => Record.isClassOf, T>(constructorInfo, v); + (ctor as any).fieldNumbers = {}; (ctor as any)._ = {}; - fieldNames.forEach((name, i) => (ctor._ as any)[name] = (r: Record, T>) => r[i]); + fieldNames.forEach((name, i) => { + (ctor._ as any)[name] = (r: Record, T>) => r[i]; + (ctor.fieldNumbers as any)[name] = i; + }); return ctor; }; }