我正在构建一个MUI表,我正在阅读文档以真正理解代码,但我对以下函数定义的含义感到困惑:

function getComparator<Key extends keyof any>(
  order: Order,
  orderBy: Key,
): (
  a: { [key in Key]: number | string },
  b: { [key in Key]: number | string },
) => number {
  return order === 'desc'
    ? (a, b) => descendingComparator(a, b, orderBy)
    : (a, b) => -descendingComparator(a, b, orderBy);
}

A和B是论点吗?还是Order和Order By?我认为order和orderBy是默认情况下可以设置的参数,a和b是在函数初始化时传递的,但我还是不确定.

推荐答案

该函数定义使用匿名类型来定义其返回类型,这是另一个函数,所以我可以理解为什么您会对它感到困惑.

也许这会让事情变得更清楚,这里我将返回类型移到一个名为Comparator的命名类型中:

type Comparator<Key extends keyof any> = (
  a: { [key in Key]: number | string },
  b: { [key in Key]: number | string },
) => number;

function getComparator<Key extends keyof any>(
  order: Order,
  orderBy: Key,
): Comparator<Key> {
  return order === 'desc'
    ? (a, b) => descendingComparator(a, b, orderBy)
    : (a, b) => -descendingComparator(a, b, orderBy);
}

TypeScript Playground

希望您能在该示例中更清楚地看到,getComparator的参数是orderorderBy.和getComparator返回一个带有参数ab的新函数.

Typescript相关问答推荐

如何将绑定到实例的类方法复制到类型脚本中的普通对象?

类型断言添加到类型而不是替换

键集分页顺序/时间戳上的筛选器,精度不相同

如何设置绝对路径和相对路径的类型?

使某些(嵌套)属性成为可选属性

接口中函数的条件参数

使用2个泛型类型参数透明地处理函数中的联合类型

下载量怎么会超过下载量?

基元类型按引用传递的解决方法

如何从一个泛型类型推断多个类型

有没有办法传递泛型类型数组,以便推断每个元素的泛型类型?

打字错误TS2305:模块常量没有导出的成员

为什么在这种情况下,打字脚本泛型无法正确自动完成?

如何在Nextjs路由处理程序中指定响应正文的类型

为什么数字是`{[key:string]:UNKNOWN;}`的有效密钥?

映射类型不是数组类型

如何使用useSearchParams保持状态

如何在Vue动态类的上下文中解释错误TS2345?

如何为对象创建类型,其中键是只读且动态的,但值是固定类型?

使用泛型时记录无法建立索引