diff --git a/packages/forms/src/form_builder.ts b/packages/forms/src/form_builder.ts index ef64b6d9edf..7721deb332e 100644 --- a/packages/forms/src/form_builder.ts +++ b/packages/forms/src/form_builder.ts @@ -75,24 +75,28 @@ export type ɵElement = // through the distributive conditional type. This is the officially recommended solution: // https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types // + // Note: Because `FormRecord` implementation extends `FormGroup`, it must be checked BEFORE `FormGroup` + // in the following clauses (otherwise it may incorrectly be inferred to `FormGroup`). + // + // // Identify FormControl container types. [T] extends [FormControl] ? FormControl : // Or FormControl containers that are optional in their parent group. [T] extends [FormControl | undefined] ? FormControl - : // FormGroup containers. - [T] extends [FormGroup] - ? FormGroup - : // Optional FormGroup containers. - [T] extends [FormGroup | undefined] - ? FormGroup - : // FormRecord containers. - [T] extends [FormRecord] - ? FormRecord - : // Optional FormRecord containers. - [T] extends [FormRecord | undefined] - ? FormRecord + : // FormRecord containers. + [T] extends [FormRecord] + ? FormRecord + : // Optional FormRecord containers. + [T] extends [FormRecord | undefined] + ? FormRecord + : // FormGroup containers. + [T] extends [FormGroup] + ? FormGroup + : // Optional FormGroup containers. + [T] extends [FormGroup | undefined] + ? FormGroup : // FormArray containers. [T] extends [FormArray] ? FormArray