test
我在 TypeScript (v5.5.4) 中有一个函数,它接受一个fieldsMap
参数,并应根据 的键和值返回特定类型fieldsMap
。但是,我无法正确定义返回类型。这是当前的实现:
function test<
K extends string,
T extends { [key in K]: string[] } = { [key in K]: string[] },
>(
fieldsMap: T // { INFO: ['A', 'B', 'C'], OTHER: ['X', 'Y', 'Z'] }
): {
[A in K]: { [E in T[A][number]]: string | number }[]
} {
// TODO: Implement
console.log(fieldsMap);
return {} as any;
}
我想像这样调用这个方法:
const result = test<'INFO' | 'OTHER'>({
INFO: ['A', 'B', 'C'],
OTHER: ['X', 'Y', 'Z'],
});
目前推断的类型result
是:
type CurrentResult = {
INFO: { [p: string]: string | number }[],
OTHER: { [p: string]: string | number }[]
};
但我希望类型是:
type ExpectedResult = {
INFO: { [p in 'A' | 'B' | 'C']: string | number }[],
OTHER: { [p in 'X' | 'Y' | 'Z']: string | number }[]
};
此外,以下行不应编译:
result.INFO.map((I) => I.WORKING); // This should not compile
我如何修改我的函数以返回正确类型的对象?