如何为将键动态添加到对象的函数定义返回类型?

时间:2019-07-28 06:02:00

标签: javascript typescript

我具有以下功能

export function getDateGroups(reviews: Reviews[]): any {
  return reviews.reduce(
    (acc, review: Reviews) => {
      if (review.isGood) {
        return { ...acc, goodReviews: [...acc.goodReviews, review] };
      }

      return { ...acc, badReviews: [...acc.badReviews, review] };
    },
    { goodReviews: [], badReviews: [] }
  );
}

可以说我具有以下功能。如何为 getDateGroups 函数定义返回类型?

在这种情况下,我可以创建一个简单的界面,但是当添加的键是动态的时,我有针对该条件的方法吗?

我还可以在reduce函数中定义 acc 的类型吗?

2 个答案:

答案 0 :(得分:0)

type DataResult = {
    goodReviews: Reviews[],
    badReviews: Reviews[]
}

尝试一下,因为acc是起始值,而您正在返回评论。

应该是什么样子

type DataResult = {
    goodReviews: Reviews[],
    badReviews: Reviews[]
}
export function getDateGroups(reviews: Reviews[]): DataResult {
    return reviews.reduce(
        (acc: DataResult, review: Reviews) => {
            if (review.isGood) {
                return { ...acc, goodReviews: [...acc.goodReviews, review] };
            }

            return { ...acc, badReviews: [...acc.badReviews, review] };
        },
        { goodReviews: [], badReviews: [] }
    );
}

编辑

使用dynamic

type DataResult = {
    [key: string]: Reviews[]
}

答案 1 :(得分:0)

您可以定义如下所示的接口,并将其用于响应和acc

interface ReviewResponse {
  [key: string]: Reviews[]
}