我有一个函数,该函数接受一个对象和两个字符串,并使用字符串返回一个带类型的对象的数组,以从提供的对象中选择两个属性。
我的编译器警告元素隐式地具有'any'类型,因为类型'{}'没有索引签名。对于map函数中的两行。
export interface SelectOption {
value: string;
label: string;
}
/**
* Map an array of objects to an array of objects compatible with select drop downs
* specifying the keys to be used for the value and the label
* @param items the object to map from
* @param valueField The field in the object containing the value
* @param labelField The field in the object containing the label
*/
export const mapObjectsToSelectOptions = (
items: object[],
valueField: string,
labelField: string,
): SelectOption[] => {
return items
.map(o => ({
value: o[valueField],
label: o[labelField],
}));
};
在Typescript中是否有解决方法?我尝试过为items参数创建一种类型,如下所示:
interface ObjectBase {
[key: string]: string;
}
但是,当然,提供的对象可能没有这种类型,因此在调用函数时出现错误。我能以某种方式使用通用吗?
答案 0 :(得分:1)
您需要使mapObjectsToSelectOptions
具有3个类型参数作为泛型:一个用于确切的对象类型T
,另外两个用于两个字段名称:用于值和标签的{{1} }和VF
。然后,编译器可以将值类型推断为LF
,将标签类型推断为T[VF]
:
T[LF]