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

如何将元组中的对象字面量类型转为所有属性必填类型

如何将元组中所有对象字面量的属性设为必填?

我有一个包含多个对象字面量类型的元组类型(本例中称为Actions),其中部分对象字面量包含可选属性。需要实现一个类型,将元组里所有对象字面量的属性都设为必填。

示例代码如下:

type ClickEvent = {
  type: 'click-event';
  name: string;
  value1?: string;
};

type PerformSearch = {
  type: 'perform-search';
  referrerPage?: string;
};

type Actions = [ClickEvent, PerformSearch]; // 为简化示例仅包含两项


type RequireAllObjectLiterals<T extends unknown[]> = ??? // 该如何实现?

type RequiredActions = RequireAllObjectLiterals<Actions>;
// 最终类型应为 -> [Required<ClickEvent>, Required<PerformSearch>]

解决方案

可以通过TypeScript的映射类型实现需求,利用元组的索引映射特性,对每个元素应用Required工具类型:

type RequireAllObjectLiterals<T extends unknown[]> = {
  [K in keyof T]: Required<T[K]>;
};

说明

  • 泛型T被约束为任意元素类型的元组/数组;
  • [K in keyof T]会遍历元组的每个数字字面量索引,确保映射后保留元组的原有结构,不会退化为普通数组;
  • 对每个索引对应的元素类型T[K],使用Required工具类型将其所有可选属性转换为必填属性。

使用该类型后,RequiredActions的实际类型为:

[
  { type: 'click-event'; name: string; value1: string; },
  { type: 'perform-search'; referrerPage: string; }
]

完全匹配预期的[Required<ClickEvent>, Required<PerformSearch>]结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:37