[英]Typescript reduce return wrong Type and also forbid to assert it
面对非常奇怪的 ts 行为。
type Labels = Record<string, boolean | undefined>
type LabelGroups = Record<string, Labels>
export function reduceLabelGroups(labelGroups: LabelGroups) {
const labels = Object.entries(labelGroups).reduce((valueMap, [, value]) => ({...valueMap, ...value}), {});
return labels;
}
它应该在 reduce 之后返回 Labels Type - 但它只返回 {} 如果您尝试断言 Labels 就像
(...{} 作为标签);
它抛出错误“不必要的转换:Array#reduce 接受默认值的类型参数。” 返回后如何在没有任何“与标签一样未知”的情况下返回类型?
正如错误所说 - .reduce
接受类型参数,所以使用它。
export function reduceLabelGroups(labelGroups: LabelGroups) {
return Object.entries(labelGroups).reduce<Labels>((valueMap, [, value]) => ({...valueMap, ...value}), {});
}
使用Object.values
可能更合适,因为您没有使用键。
export function reduceLabelGroups(labelGroups: LabelGroups) {
return Object.values(labelGroups).reduce<Labels>((valueMap, value) => ({...valueMap, ...value}), {});
}
或者可能完全避免.reduce
,它在这里不太合适
export function reduceLabelGroups(labelGroups: LabelGroups) {
const valueMap: Labels = {};
for (const value of Object.values(labelGroups)) {
Object.assign(valueMap, value);
}
return valueMap;
};
你可以做得更短,但它需要一个类型断言。
export function reduceLabelGroups(labelGroups: LabelGroups) {
return Object.assign({}, ...Object.values(labelGroups)) as Labels;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.