如何在TypeScript中区分两种验证函数类型
嵌套类型守卫的类型区分问题
需求背景
为实现嵌套类型检查或对象间的相互引用,需要定义两种函数类型:
- ValidatorFunction:直接返回类型检查结果,签名为
(data: unknown) => boolean(调用方式:isOk(data)) - ValidatorRetriever:返回 ValidatorFunction 的高阶函数,签名为
() => (data: unknown) => boolean(调用方式:isOk()(data))
遇到的问题
功能逻辑已实现,但无法正确区分作为参数传入的这两种函数类型:
- 无法导出同名重载函数:TypeScript 不允许导出同名的函数值
- 无法通过
instanceof区分类型:TypeScript 的类型信息会在编译阶段被丢弃,运行时无法识别
待解决的任一目标
A. 实现同名但参数不同的函数导出(例如示例中的 isArray)
B. 在单个函数内部区分 ValidatorFunction 和 ValidatorRetriever 两种类型
内容的提问来源于stack exchange,提问作者Nuubles
相关产品推荐
相关产品推荐

