Make field numbers accessible
This commit is contained in:
parent
b382b61bf6
commit
741b664970
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue