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

TypeScript基于布尔选项参数实现箭头函数返回类型缩小

问题根源

你现有类型签名的问题在于,条件判断直接使用了CreateDocumentListOptions["withVersions"]的固定类型boolean | undefined,该类型永远不满足extends true的条件,所以无论传入什么参数,TypeScript都会判定返回值固定为Document[]类型。

解决方案

你只需要给函数类型加上泛型约束,动态捕获传入参数的实际类型即可,修改后的类型定义如下:

type CreateDocumentListOptions = {
  withVersions?: boolean;
};

// 新增泛型T捕获入参的实际类型
type CreateDocumentList = <T extends CreateDocumentListOptions>(
  options?: T
) => T["withVersions"] extends true
  ? DocumentWithVersions[]
  : Document[];

// 原有函数实现不需要任何修改
const createDocumentList: CreateDocumentList = ({
  withVersions = false
} = {}) =>
  times(
    withVersions ? createDocumentWithVersions : createDocument,
    chance.natural({ min: 1, max: 10 })
  );

修改完成后,调用createDocumentList({ withVersions: true })时,TypeScript会自动推断泛型T的withVersions属性为字面量类型true,因此返回值类型会自动推导为DocumentWithVersions[],类型报错即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:15:02