我想编写一个函数来修改具有特定接口的表单的值。然后我得到字符串不是表单界面键的一部分的错误。如何为该函数定义类型?为什么我不能使用接口作为类型?
interface IForm {
age: number
name: string
job: string
}
// ts 错误:无法将字符串分配给“age” | "姓名" | “工作”
const setCustom = value => setValue(value, "")
//没有ts错误
const setCustom: (value: "age" | "name" | "job") => void = value => setValue(value, "")
答案 0 :(得分:0)
您似乎正在寻找 keyof
type operator,它采用像 IForm
这样的对象类型并生成其键的联合:
type KeyofIform = keyof IForm;
// type KeyofIform = "age" | "name" | "job"
因此,在您手动指定 "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"'
答案 1 :(得分:-2)
你需要把;在每个变量的末尾:
interface IForm {
age?: number;
name?: string;
job?: string;
}