@@ -60,14 +60,23 @@ export interface DiscriminatorPropertyOptions {
6060export 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