Make field numbers accessible

This commit is contained in:
Tony Garnock-Jones 2023-05-03 10:22:20 +03:00
parent b382b61bf6
commit 741b664970
1 changed files with 6 additions and 1 deletions

View File

@ -20,6 +20,7 @@ export interface RecordConstructor<L extends Value<T>, Fs, Names extends Tuple<k
constructorInfo: RecordConstructorInfo<L, T>;
isClassOf(v: any): v is Record<L, CtorTypes<Fs, Names>, T>;
_: RecordGetters<Fs, Record<L, CtorTypes<Fs, Names>, T>>;
fieldNumbers: { [K in string & keyof Fs]: number };
};
export interface RecordConstructorInfo<L extends Value<T>, 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<L, CtorTypes<Fs, Names>, T> => Record.isClassOf<L, CtorTypes<Fs, Names>, T>(constructorInfo, v);
(ctor as any).fieldNumbers = {};
(ctor as any)._ = {};
fieldNames.forEach((name, i) => (ctor._ as any)[name] = (r: Record<L, CtorTypes<Fs, Names>, T>) => r[i]);
fieldNames.forEach((name, i) => {
(ctor._ as any)[name] = (r: Record<L, CtorTypes<Fs, Names>, T>) => r[i];
(ctor.fieldNumbers as any)[name] = i;
});
return ctor;
};
}