You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中实现仅接受数值类型属性的sortBy函数

实现类型安全的sortBy函数

需求:编写一个sortBy函数,接收T类型的数组以及用于排序的T类型属性键,仅允许传入对应值为数值类型的属性键。

初始实现的不足

目前有如下基础实现,但无法限制Key类型,使得T[Key]必须指向数值类型:

const sortBy = <T, Key extends keyof T>(items: T[], key: Key) { 
  // 实现逻辑
}

尝试过的无效类型定义

曾尝试编写以下类型,但未达到预期效果:

type NumericAttributesOf<T> = {
  [K in keyof T]: T[K] extends number ? T[K] : never
}

最终解决方案

通过构造筛选属性键的工具类型,结合函数重载完成了类型安全的实现:

// 工具类型:筛选出T类型中值为V类型的所有属性键
type KeysMatching<T, V> = {
  [K in keyof T]: T[K] extends V ? K : never
}[keyof T]

// 函数重载:确保输入输出的类型一致性
function sortBy<T>(items: T[], key: KeysMatching<T, number>): T[]
function sortBy<K extends PropertyKey>(
  items: Record<K, number>[],
  key: K,
): Record<K, number>[] {
  return [...items].sort((a, b) => a[key] - b[key])
}

内容的提问来源于stack exchange,提问作者DiegoFrings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:45:33