繁体   English   中英

Typescript reduce return wrong Type 也禁止断言

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM