首页 > 解决方案 > 在过滤和(希望)铸造时避免任何类型

问题描述

当我定义以下函数时:

export const filterAndCast = <T, U>(
    items: T[],
    predicate: Predicate<T>,
    cast: (x: T) => U,
) => items
    .reduce(
        (p, c) => [
            ...p,
            ...(predicate(c) ? [cast(c)] : []),
        ],
        [],
    );

我希望已经U[]回来了。但我反而得到any[].

我怎样才能解决这个问题?

标签: typescript

解决方案


这个怎么样?

export const filterAndCast = <T, U>(
    items: T[],
    predicate: (c:T) => boolean,
    cast: (x: T) => U,
) => items
    .reduce(
        (p, c) => [
            ...p,
            ...(predicate(c) ? [cast(c)] : []),
        ],
        [],
    );



const results = filterAndCast([1, 2, 3], x => x % 2 === 0, x => Number(x))


results.forEach(el=> console.log(typeof el));

推荐阅读