UNPKG

@oasisdigital/angular-typed-forms-helpers

Version:

Some helper types for when you are dealing with Angular's typed reactive forms system

30 lines (29 loc) 2.42 kB
import { FormArray, FormControl, FormGroup, AbstractControl } from '@angular/forms'; export type AngularForm<T> = T extends (infer ElementType)[] ? FormArray<AngularForm<ElementType>> : T extends Date ? FormControl<T | null> : T extends object ? FormGroup<{ [Key in keyof T]: AngularForm<T[Key]>; }> : T extends boolean ? FormControl<boolean | null> : FormControl<T | null>; export type NonNullableAngularForm<T> = T extends (infer ElementType)[] ? FormArray<NonNullableAngularForm<ElementType>> : T extends Date ? FormControl<T> : T extends object ? FormGroup<{ [Key in keyof T]: NonNullableAngularForm<T[Key]>; }> : T extends boolean ? FormControl<boolean> : FormControl<T>; export type AngularFormGroupShallow<T extends object> = T extends any[] | Date ? never : FormGroup<{ [Key in keyof T]: FormControl<T[Key] | null>; }>; export type NonNullableAngularFormGroupShallow<T extends object> = T extends any[] | Date ? never : FormGroup<{ [Key in keyof T]: FormControl<T[Key]>; }>; export type AngularFormGroup<T extends object> = T extends any[] | Date ? never : FormGroup<{ [Key in keyof T]: AngularForm<T[Key]>; }>; export type NonNullableAngularFormGroup<T extends object> = T extends any[] | Date ? never : FormGroup<{ [Key in keyof T]: NonNullableAngularForm<T[Key]>; }>; export type AngularFormArrayShallow<T extends any[]> = T extends (infer ElementType)[] ? FormArray<FormControl<ElementType | null>> : never; export type NonNullableAngularFormArrayShallow<T extends any[]> = T extends (infer ElementType)[] ? FormArray<FormControl<ElementType>> : never; export type AngularFormArray<T extends any[]> = T extends (infer ElementType)[] ? FormArray<AngularForm<ElementType>> : never; export type NonNullableAngularFormArray<T extends any[]> = T extends (infer ElementType)[] ? FormArray<NonNullableAngularForm<ElementType>> : never; export type AngularFormValue<T> = T extends FormArray<infer FA> ? AngularFormValue<FA>[] : T extends FormGroup<infer FG> ? Partial<{ [Key in keyof FG]: AngularFormValue<FG[Key]>; }> : T extends FormControl<infer FC> ? FC : T extends AbstractControl<infer AC> ? AC : never; export type AngularFormRawValue<T> = T extends FormArray<infer FA> ? AngularFormRawValue<FA>[] : T extends FormGroup<infer FG> ? { [Key in keyof FG]: AngularFormRawValue<FG[Key]>; } : T extends FormControl<infer FC> ? FC : T extends AbstractControl<infer AC> ? AC : never;