Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在typescript中定义接口类型?_Typescript_React Hook Form - Fatal编程技术网

如何在typescript中定义接口类型?

如何在typescript中定义接口类型?,typescript,react-hook-form,Typescript,React Hook Form,我想写一个函数,用特定的接口修改窗体的值。然后我得到一个错误,字符串不是表单接口键的一部分。如何定义该函数的类型?为什么我不能使用接口作为类型 //ts错误:无法将字符串分配给“年龄”|“名称”|“作业” //无ts错误 const setCustom: (value: "age" | "name" | "job") => void = value => setValue(value, "") 你需要

我想写一个函数,用特定的接口修改窗体的值。然后我得到一个错误,字符串不是表单接口键的一部分。如何定义该函数的类型?为什么我不能使用接口作为类型

//ts错误:无法将字符串分配给“年龄”|“名称”|“作业”

//无ts错误

const setCustom: (value: "age" | "name" | "job") => void = value => setValue(value, "")

你需要把;在每个变量的末尾:

interface IForm {
   age?: number;
   name?: string;
   job?: string;
}

您似乎正在寻找的对象类型为
IForm
,并生成其键的并集:

type KeyofIform = keyof IForm;
// type KeyofIform = "age" | "name" | "job"
因此,无论您在何处手动指定
“年龄”|“姓名”|“职务”
,您都可以改为使用
keyof IForm
,这是等效的,如果
IForm
的定义更改,它将自动更改:

const setCustom: (value: keyof IForm) => void = value => setValue(value, "")
// const setCustom: (value: keyof IForm) => void

setCustom("age"); // okay
setCustom("name"); // okay
setCustom("job"); // okay
setCustom("shoeSize"); // error!
// Argument of type '"shoeSize"' is not assignable 
// to parameter of type '"age" | "name" | "job"'

<>代码> SETValue?请考虑修改这里的代码,以便组成一个独立的IDE,这样可以演示你的问题,唯一的问题就是你要问的问题。现在我不明白错误是从哪里来的,也不明白你所说的“使用接口作为类型”是什么意思;假设要将接口作为一种类型使用,您可能会在代码中的某个地方提到有问题的接口。@jcalz我添加了一个沙盒链接。您将找到函数setCustom。我想创建一个类型化函数,这样参数就不存在了。
const setCustom=(a:keyof FormData)=>setValue(a,“”)
对您有用吗?或者您在寻找其他内容?@jcalz这正是我需要的,谢谢您没有添加分隔符是有效的:很遗憾,这个答案不正确(您不需要在属性中添加
),并且似乎没有解决问题中的问题。我建议您编辑或删除它。根据您的设置,Java技术ASI(自动分号插入)在ES中工作,在TS中也是如此
type KeyofIform = keyof IForm;
// type KeyofIform = "age" | "name" | "job"
const setCustom: (value: keyof IForm) => void = value => setValue(value, "")
// const setCustom: (value: keyof IForm) => void

setCustom("age"); // okay
setCustom("name"); // okay
setCustom("job"); // okay
setCustom("shoeSize"); // error!
// Argument of type '"shoeSize"' is not assignable 
// to parameter of type '"age" | "name" | "job"'