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

TypeScript:能否定义继承其他类型的泛型类型?

解决TypeScript重复泛型约束的问题

你想要提取重复的泛型约束<T extends Record<string, unknown>>以减少代码冗余,之前的尝试方向有误,以下是正确的实现方式:

正确方案:提取约束为类型别名

首先定义一个类型别名来替代重复的Record<string, unknown>约束:

type ExtendedRecord = Record<string, unknown>;

然后在你的泛型类型/接口中复用这个约束:

type SortDescriptor<T extends ExtendedRecord> = {
  // 这里添加你的属性
};

interface Config<T extends ExtendedRecord> {
  // 这里添加你的属性
}

interface TableDataSort<T extends ExtendedRecord> {
  // 这里添加你的属性
}

为什么之前的尝试无效?

  • 第一种写法type ExtendedRecord<T> = <T extends Record<string, unknown>>;:这不是合法的TypeScript语法,泛型类型别名的右侧必须是具体的类型定义,不能直接写泛型约束语法。
  • 第二种写法type ExtendedRecord<T extends Record<string, unknown>> = T;:这只是把传入的T原样返回,本质是一个“透传”类型别名。当你写SortDescriptor<ExtendedRecord>时,是把ExtendedRecord这个泛型类型本身作为参数传入,而不是应用约束,所以达不到复用约束的效果。

进阶优化:泛型参数默认值

如果大部分场景下不需要指定具体的T类型,可以给泛型参数加默认值,进一步简化使用:

type SortDescriptor<T extends ExtendedRecord = ExtendedRecord> = {};
interface Config<T extends ExtendedRecord = ExtendedRecord> {};
interface TableDataSort<T extends ExtendedRecord = ExtendedRecord> {};

// 使用时可以直接写,无需指定T
const desc: SortDescriptor = {};

内容的提问来源于stack exchange,提问作者Alejandro B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:25:17