Skip to content

Commit 836ec19

Browse files
Store resolved types in discriminatorProperty
1 parent 2b780e7 commit 836ec19

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

src/json-inheritance.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,23 @@ export interface DiscriminatorPropertyOptions {
6060
export function discriminatorProperty(
6161
{property, types}: DiscriminatorPropertyOptions,
6262
): ObjectInheritanceOptions {
63+
let resolvedTypes: {[k: string]: Serializable<any>} | undefined;
6364
let reverseMapping: Map<Function, string> | undefined;
6465

66+
const getResolvedTypes = () => {
67+
if (resolvedTypes === undefined) {
68+
resolvedTypes = types();
69+
}
70+
71+
return resolvedTypes;
72+
};
73+
6574
// Create a map for O(1) type-to-discriminator-lookup once.
6675
const getReverseMapping = () => {
6776
if (reverseMapping === undefined) {
68-
const reverseMapItems: Array<[Function, string]> = Object.keys(types())
77+
const reverseMapItems: Array<[Function, string]> = Object.keys(getResolvedTypes())
6978
.map(discriminator => {
70-
return [types()[discriminator].prototype.constructor, discriminator];
79+
return [getResolvedTypes()[discriminator].prototype.constructor, discriminator];
7180
});
7281
reverseMapping = new Map<Function, string>(reverseMapItems);
7382
}
@@ -81,7 +90,7 @@ export function discriminatorProperty(
8190
return result;
8291
},
8392
resolveType: data => {
84-
return types()[data[property]];
93+
return getResolvedTypes()[data[property]];
8594
},
8695
};
8796
}

0 commit comments

Comments
 (0)