TypeScript将任何类型化数组转换为通用键值数组
我有各种数组数据,如下所示:TypeScript将任何类型化数组转换为通用键值数组,typescript,Typescript,我有各种数组数据,如下所示: Countries: [{code: "USA", countryDesc: "United States"},{code: "MEX", countryDesc: "Mexico"}] 及 我希望能够将特定的code/countryDesc或code/stateDesc转换为要使用的“通用”键值对。因此,我的转换程序将为我提供以下信息: [{key:"USA",
Countries: [{code: "USA", countryDesc: "United States"},{code: "MEX", countryDesc: "Mexico"}]
及
我希望能够将特定的code/countryDesc或code/stateDesc转换为要使用的“通用”键值对。因此,我的转换程序将为我提供以下信息:
[{key:"USA", value:"United States"},{key:"MEX", value:"Mexico"}]
及
我的目标是编写一个函数,该函数接受数组以及键和值的属性名称,然后将它们转换为具有键和值的数组,而不是其他属性名称
我所拥有的是:
export interface IAnyArray {
key: string;
value: string;
}
const convertToKeyValue = (
array: IAnyArray[],
keyname: string,
valuename: string
) => {
if (array && array.length > 0) {
return array.map((a) => {
return { key: a[keyname], value: array[valuename] };
});
}
};
我得到了一个错误:
元素隐式具有“any”类型,因为表达式的类型为
“string”不能用于索引类型“IAnyArray”。无索引签名
在类型上找到了类型为“string”的参数
“IAnyArray”ts(7053)
用于函数中的[keyname]和[valuename]
这是我将如何做的,具体到输入,但如果可能的话,我想要一个“通用”机制:
const convertCountriesToKeyValue = (
countries: { code: string; countryDesc: string }[]
) => {
return countries.map((country) => {
return { key: country.code, value: country.countryDesc };
});
};
我在网上搜索过,找不到任何有用的东西来帮助解决这个问题
我非常感谢在这方面的任何帮助。谢谢。如果我正确理解了您的问题,您希望传入任何属性名称的对象数组,但返回IAnyArray。也许是这样的
const convertToKeyValue = <T extends any>(
array: T[],
keyname: keyof T,
valuename: keyof T
) => {
return array.map((a) => {
return { key: a[keyname], value: a[valuename] };
});
};
const countries = [{ code: "USA", countryDesc: "United States" }, { code: "MEX", countryDesc: "Mexico" }];
const keyValueCountries = convertToKeyValue(countries, "code", "countryDesc");
const convertToKeyValue=(
数组:T[],
keyname:keyof T,
valuename:keyof T
) => {
返回数组.map((a)=>{
返回{key:a[keyname],value:a[valuename]};
});
};
const countries=[{代码:“美国”,countryDesc:“美国”},{代码:“墨西哥”,countryDesc:“墨西哥”}];
const keyValueCountries=convertTokyValue(国家,“代码”、“国家描述”);
如果我正确理解了您的问题,您希望传入任何属性名称的对象数组,但返回IAnyArray。也许是这样的
const convertToKeyValue = <T extends any>(
array: T[],
keyname: keyof T,
valuename: keyof T
) => {
return array.map((a) => {
return { key: a[keyname], value: a[valuename] };
});
};
const countries = [{ code: "USA", countryDesc: "United States" }, { code: "MEX", countryDesc: "Mexico" }];
const keyValueCountries = convertToKeyValue(countries, "code", "countryDesc");
const convertToKeyValue=(
数组:T[],
keyname:keyof T,
valuename:keyof T
) => {
返回数组.map((a)=>{
返回{key:a[keyname],value:a[valuename]};
});
};
const countries=[{代码:“美国”,countryDesc:“美国”},{代码:“墨西哥”,countryDesc:“墨西哥”}];
const keyValueCountries=convertTokyValue(国家,“代码”、“国家描述”);
根据您的描述,这应该是您正在寻找的:
const convertToKeyValue = (
array: IAnyArray[],
keyName: string,
valueName: string
) => {
return array.map((a) => {
return {[keyName]: a.key, [valueName]: a.value}
})
}
旁注:我建议保留keyName
和valueName
作为前两个参数(就像我在操场上做的那样),以便在将来决定使用时使函数更具可组合性
根据您的描述,这应该是您正在寻找的:
const convertToKeyValue = (
array: IAnyArray[],
keyName: string,
valueName: string
) => {
return array.map((a) => {
return {[keyName]: a.key, [valueName]: a.value}
})
}
旁注:我建议保留keyName
和valueName
作为前两个参数(就像我在操场上做的那样),以便在将来决定使用时使函数更具可组合性