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>;
|
constructorInfo: RecordConstructorInfo<L, T>;
|
||||||
isClassOf(v: any): v is Record<L, CtorTypes<Fs, Names>, T>;
|
isClassOf(v: any): v is Record<L, CtorTypes<Fs, Names>, T>;
|
||||||
_: RecordGetters<Fs, 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> {
|
export interface RecordConstructorInfo<L extends Value<T>, T = GenericEmbedded> {
|
||||||
|
@ -74,8 +75,12 @@ export namespace Record {
|
||||||
const constructorInfo = { label, arity: fieldNames.length };
|
const constructorInfo = { label, arity: fieldNames.length };
|
||||||
ctor.constructorInfo = constructorInfo;
|
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.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)._ = {};
|
(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;
|
return ctor;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue