我在 Typescript 中有一个简单的函数:
const updateItem = (key: keyof IDevice, val: string | number, i: number) => {
const devices = [...formData.devices];
const device = devices[i];
// @ts-ignore
device[key] = val;
devices[i] = device;
setFormData({ ...formData, devices });
};
智能设备:
export interface IDevice {
name: string;
width: number;
height: number;
userAgentString: string;
}
表单数据的类型:
interface FormState {
name: string;
description: string;
devices: IDevice[];
}
我看到的错误是这样的:
<块引用>输入'字符串| number' 不能分配给类型 'never'。
类型 'string' 不可分配给类型 'never'.ts(2322)
请帮助我,因为我不是 Typescript 的专家。
答案 0 :(得分:1)
我能够更改您的函数定义以使其正常工作:
function updateItem<K extends keyof IDevice>(key: K, val: IDevice[K], i: number) {
const devices = [...formData.devices];
const device = devices[i];
device[key] = val;
devices[i] = device;
setFormData({ ...formData, devices });
}
通过提取键类型并使其通用,TypeScript 可以更好地发挥作用。它还具有以下优点,例如updateItem('height', 'string', 0)
将产生 TS 错误,因为它需要 number
字段的 height
。