typescript 如何使用FormGroup和FormArray Package 接口属性

qacovj5a  于 2023-05-30  发布在  TypeScript
关注(0)|答案(1)|浏览(195)

我有一个接口:

export interface Person {
  name: string;
  age: number;
  phones: Phone[];
}

如果不是数组,我想将这些属性转换为FormGroup,如果是数组,则转换为FormArray(如本例中的电话)。我试着创建一个这样的界面

export type GenericFormModel<T> = {
  [K in keyof T]: K extends [] ? AbstractControl<T[K]> : FormControl<T[K] | null>;
};

但是就是不行,typescript还是认为phones是一个FormGroup,但是它应该是一个FormArray。我该怎么解决?

webghufk

webghufk1#

问题是你正在检查K extends [],其中K只是一个键:'name' | 'age' | 'phones'。您应该检查的是键K下的值。另一个问题是,您正在检查[],这是一个空元组,只有当值也是[]时,它才会为真。而是检查unknown[]

type GenericFormModel<T> = {
  [K in keyof T]: NonNullable<T[K]> extends unknown[]
    ? AbstractControl<T[K]>
    : FormControl<T[K] | null>;
};

相关问题