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

如何强制TypeScript中run函数的参数函数必须返回值?

强制函数参数必须返回值的TypeScript实现

你想要约束run函数的参数f必须正常返回任意值(排除返回never的情况,比如抛出错误、无限循环的函数),你的思路方向是对的,但!never并非TypeScript的合法语法,以下是两种正确的实现方式:

方法一:泛型条件类型(推荐)

通过泛型结合条件类型,直接拒绝返回never的函数:

const run = <T>(f: () => T extends never ? never : T) => f();

测试示例

  • 合法调用(函数有正常返回值):
    run(() => 123); // 正常通过类型检查
    run(() => "test"); // 正常通过
    run(() => undefined); // 正常通过,undefined属于合法返回值
    
  • 非法调用(函数返回never):
    // 抛出错误的函数,返回类型为never
    run(() => { throw new Error("error"); }); // TypeScript报错,无法传入
    // 无限循环的函数,返回类型为never
    run(() => { while(true) {} }); // 同样报错
    

方法二:显式定义非never返回函数类型

如果不需要推导返回值的具体类型,可以直接定义一个排除never的函数类型:

type NonNeverReturnFn = () => Exclude<unknown, never>;

const run = (f: NonNeverReturnFn) => f();

这种方式下,返回never的函数无法赋值给NonNeverReturnFn,会触发类型错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:10:27