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

TypeScript 5.4:无需泛型实现函数参数类型展开优化DX

解决方案

要在TypeScript 5.4中实现函数参数类型悬停时自动展开,同时避免冗余泛型、符合禁止内联类型的编码规范,可以通过以下方式实现:

核心思路

利用TypeScript的类型推断与工具类型,将原类型别名转换为展开后的结构,无需为函数添加泛型参数,同时支持函数声明语法。

具体实现

  1. 定义通用的类型展开工具(可放在项目公共类型文件中复用):
type Prettify<T> = T extends object 
  ? { [K in keyof T]: T[K] } 
  : T;

这个工具类型通过遍历对象属性,将嵌套的类型别名或交叉类型展开为扁平化的结构,同时保留原类型的所有属性。

  1. 在函数声明中使用该工具类型包裹原参数类型别名:
// 原参数类型别名(符合编码规范,未内联)
type UserProps = {
  name: string;
  age: number;
  contact: {
    phone: string;
    email: string;
  };
};

// 函数声明,使用Prettify展开类型
function printUserInfo(props: Prettify<UserProps>) {
  console.log(`${props.name} (${props.age}) - ${props.contact.email}`);
}

效果说明

  • 悬停函数参数props时,TypeScript会直接显示展开后的完整类型结构,而非仅显示UserProps别名。
  • 未使用函数泛型,完全符合函数声明的语法要求。
  • 未违反内联类型的规范,所有类型定义仍通过别名维护。

补充说明

如果不需要处理复杂的交叉类型,也可以使用更简洁的推断式展开工具:

type Expand<T> = T extends infer O ? O : never;

使用方式与Prettify一致,对于简单对象类型的展开效果相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:52:40