数组输入的Typescript泛型类型

数组输入的Typescript泛型类型,typescript,Typescript,关于数组输入的泛型类型,我有一个问题。我有一个名为useForm的函数,它接受以下选项 export interface DataType { [key: string]: FieldValue; } export type FieldValue = boolean | string | string[] | number | {}; export default function useForm<Data extends DataType>( { mode, valid

关于数组输入的泛型类型,我有一个问题。我有一个名为
useForm
的函数,它接受以下选项

export interface DataType {
  [key: string]: FieldValue;
}

export type FieldValue = boolean | string | string[] | number | {};

export default function useForm<Data extends DataType>(
  { mode, validationSchema, defaultValues, validationFields }: Props<Data> = {
    mode: 'onSubmit',
    defaultValues: {},
  },
): UseFormFunctions<Data> {
}

export interface Props<Data> {
  mode: 'onSubmit' | 'onBlur' | 'onChange';
  defaultValues?: { [key: string]: any };
  validationFields?: string[]; // how do i use generic type here to only allow key from FormData
  validationSchema?: any;
}

type FormData = {
  firstName: string,
  lastName: string,
}

const { register } = useForm<FormData>({
  validationFields: ['test'] // should throw error because it's not firstname or lastname
})
导出接口数据类型{
[键:字符串]:字段值;
}
导出类型FieldValue=boolean | string | string[]| number |{};
导出默认函数useForm(
{mode,validationSchema,defaultValues,validationFields}:Props={
模式:“onSubmit”,
默认值:{},
},
):UseFormFunctions{
}
导出接口道具{
模式:“onSubmit”|“onBlur”|“onChange”;
defaultValues?:{[key:string]:any};
validationFields?:string[];//如何在此处使用泛型类型仅允许来自FormData的键
validationSchema?:任何;
}
类型FormData={
名字:string,
姓氏:string,
}
常量{register}=useForm({
validationFields:['test']//应引发错误,因为它不是firstname或lastname
})

当找不到FormData type时,我希望它抛出一个类型错误。

您可以使用
keyof
数据中获得键的并集:

export default function useForm<Data extends DataType>(
  { mode, validationSchema, defaultValues, validationFields }: Props<Data> = {
    mode: 'onSubmit',
    defaultValues: {},
  },
): UseFormFunctions<Data> {
  return null!;
}

export interface Props<Data> {
  mode: 'onSubmit' | 'onBlur' | 'onChange';
  defaultValues?: { [key: string]: any };
  validationFields?: Array<keyof Data>; // how do i use generic type here to only allow key from FormData
  validationSchema?: any;
}

type FormData = {
  firstName: string,
  lastName: string,
}

const { register } = useForm<FormData>({
  mode: 'onBlur',
  validationFields: ['test'] // error now
})
导出默认函数useForm(
{mode,validationSchema,defaultValues,validationFields}:Props={
模式:“onSubmit”,
默认值:{},
},
):UseFormFunctions{
返回null!;
}
导出接口道具{
模式:“onSubmit”|“onBlur”|“onChange”;
defaultValues?:{[key:string]:any};
validationFields?:Array;//如何在此处使用泛型类型来仅允许来自FormData的键
validationSchema?:任何;
}
类型FormData={
名字:string,
姓氏:string,
}
常量{register}=useForm({
模式:“onBlur”,
validationFields:['test']//现在出现错误
})

您能否发布
useForm
@TitianCernicova Dragomir的签名?当然,谢谢您的关注。您能否发布UseFormFunctions和DataTypesure@ShadabFaiz的代码?谢谢您的帮助!我不知道你可以这么做,你有没有机会分享一下参考资料?想learn@Bruce这是一个很好的开始:快速提问数组如何转换为[]版本因为我有一个eslint错误:18:22错误数组类型使用“Array”是禁止的。请使用“T[]”代替@typescript eslint/arra,谢谢bill@Bruce
(keyof Data)[]
但我觉得这特别难看。。对于复杂类型,数组要好得多。。