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

如何在TypeScript中编写LastElementOf类型获取元组最后元素类型

实现TypeScript的LastElementOf类型获取元组最后一个元素类型

要实现LastElementOf<T>类型,我们可以利用TypeScript的条件类型和元组类型推断特性,区分处理具体元组和普通数组两种场景:

定义LastElementOf类型

type LastElementOf<T extends unknown[]> = T extends [...infer _, infer Last] ? Last : T[number];

类型逻辑说明

  • 针对具体元组:[...infer _, infer Last]会将元组的所有前置元素匹配到占位符_(表示无需使用的类型),仅提取最后一个元素的类型到Last,最终返回Last。
  • 针对普通数组:如果传入的是普通数组类型(如string[]、unknown[]),无法匹配元组的展开模式,此时返回T[number](即数组的元素类型)。

结合你的takelast函数使用

假设ParamType<T>和unparam有如下示例实现,完整代码如下:

// 示例类型与工具函数(可替换为你的实际实现)
type ParamType<T> = { value: T };
function unparam<T>(obj: ParamType<T>): T {
  return obj.value;
}

// 定义LastElementOf类型
type LastElementOf<T extends unknown[]> = T extends [...infer _, infer Last] ? Last : T[number];

// 实现takelast函数
function takelast<T extends unknown[]>(
  ...input: {
    [index in keyof T]: ParamType<T[index]>
  }
): LastElementOf<T> {
  // 类型断言确保编译器识别返回值类型
  return unparam(input[input.length - 1]) as LastElementOf<T>;
}

测试用例验证

// 元组场景:返回最后一个元素的类型number
const numResult = takelast({ value: 'hello' }, { value: true }, { value: 42 });
// numResult 类型为 number

// 普通数组场景:返回元素类型string
const strResult = takelast(...[{ value: 'a' }, { value: 'b' }, { value: 'c' }] as ParamType<string>[]);
// strResult 类型为 string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:10