打字稿:如果参数包含字段,则键入

时间:2018-04-01 05:49:35

标签: typescript

我有以下功能我试图在不使用any的情况下输入。

export function byMostRecent(arr: any[]) {
  return [...arr].sort((a,b) => {
    return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
  })
}

我不知道怎么说,"参数必须包含createdAt字段"。

2 个答案:

答案 0 :(得分:3)

你应该使用一个接口(或者我将在匿名类型下面使用)和泛型来约束参数类型和从参数到结果的流类型信息:

export function byMostRecent<T extends { createdAt: string|number|Date }>(arr: T[]):T[] {
  return [...arr].sort((a,b) => {
    return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
  })
} 

答案 1 :(得分:0)

您可以使用createdAt类型:

interface Dates {
  createdAt: string|number|Date
}
export function byMostRecent(arr: Dates[]) {
  return [...arr].sort((a,b) => {
    return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
  })
}