@@ -21,6 +21,11 @@ type GetFormControlProperty<T, S> = S extends `${infer K}.${infer R}`
2121 ? T [ S ]
2222 : any ;
2323
24+ type GetFormGroupT < C extends FormGroup < any > > = C extends FormGroup < infer T > ? T : unknown ;
25+ type GetFormGroupValue < T extends { [ K in keyof T ] : AbstractControl } > = {
26+ [ K in keyof T ] ?: T [ K ] extends FormGroup ? GetFormGroupValue < GetFormGroupT < T [ K ] > > : T [ K ] [ 'value' ] ;
27+ } ;
28+
2429function find ( control : AbstractControl , path : string [ ] | string , delimiter : string ) {
2530 if ( path == null ) return null ;
2631
@@ -107,15 +112,15 @@ export class FormGroup<T extends { [K in keyof T]: AbstractControl } = any> exte
107112 } ) ;
108113 this . updateValueAndValidity ( onlySelf ) ;
109114 }
110- override patchValue ( value : { [ K in keyof T ] ?: T [ K ] [ 'value' ] } & { [ K : string ] : any } , onlySelf ?: boolean ) : void {
115+ override patchValue ( value : GetFormGroupValue < T > & { [ K : string ] : any } , onlySelf ?: boolean ) : void {
111116 Object . keys ( value ) . forEach ( ( name ) => {
112117 if ( this . controls [ name ] ) {
113118 this . controls [ name ] . patchValue ( value [ name ] , true ) ;
114119 }
115120 } ) ;
116121 this . updateValueAndValidity ( onlySelf ) ;
117122 }
118- override reset ( value : { [ K in keyof T ] ?: T [ K ] [ 'value' ] } & { [ K : string ] : any } = { } , onlySelf ?: boolean ) : void {
123+ override reset ( value : GetFormGroupValue < T > & { [ K : string ] : any } = { } , onlySelf ?: boolean ) : void {
119124 this . _forEachChild ( ( control , name ) => {
120125 control . reset ( value [ name ] , true ) ;
121126 } ) ;
0 commit comments