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