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

如何限制TypeScript泛型函数返回类型为对象或数组(排除any与string)

修改TypeScript泛型函数的返回类型约束

要限制泛型返回值只能是任意对象或数组,同时排除any和string,可以通过泛型约束来实现,具体代码和说明如下:

private getItem<T extends Record<string, unknown> | unknown[]>(identifier: string): T {
  // 原函数逻辑,返回值需符合T的约束
  return /* 你的返回值逻辑 */;
}

约束细节说明:

  • Record<string, unknown>:指定T为任意键是字符串类型、值为未知类型的对象,既保证了对象类型的通用性,又避免了any的松散类型问题。
  • unknown[]:覆盖所有元素类型的数组场景,确保数组类型合法。
  • 两者的联合类型直接排除了string、number等原始类型,同时any也无法满足该约束,自然被禁止。

可选的严格约束(排除null/undefined):

如果项目未开启严格空值检查,object类型可能包含null,可以通过额外约束排除这类值:

private getItem<T extends (Record<string, unknown> | unknown[]) & {}>(identifier: string): T {
  return /* 你的返回值逻辑 */;
}

这里的& {}会过滤掉null和undefined,因为这两个值无法赋值给非空对象类型。

调用示例:

// 合法调用:返回对象
const user = this.getItem<{ id: number; name: string }>("user-id");
// 合法调用:返回数组
const list = this.getItem<string[]>("item-list");

// 非法调用(TypeScript会直接报错)
const str = this.getItem<string>("some-string"); // string类型不符合约束
const anyVal = this.getItem<any>("any-id"); // any类型不符合约束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:25:14