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

如何不使用any定义任意函数类型?TypeScript合规方案问询

替代any的任意函数类型方案

下面是两种符合no-explicit-any规则、且能接收所有函数类型的替代方案:

1. 使用内置Function类型(最简洁)

TypeScript内置的Function类型是所有函数的顶层超类型,任何函数都可以赋值给它,完全规避显式any:

type AnyFunction = Function;

注意:Function的调用签名比较宽松——调用时允许传入任意参数,返回值为any。如果只是用来标记“这是一个函数”而不需要调用,这是最优选择;若需要调用,建议对返回值做类型断言或收窄处理。

2. 泛型+unknown约束(更安全)

如果希望保留返回值的unknown类型(比any更安全),可以用泛型定义兼容所有函数的类型:

type SafeAnyFunction<TArgs extends readonly unknown[] = readonly unknown[], TReturn = unknown> = (...args: TArgs) => TReturn;

使用示例:

function handleFunction(fn: SafeAnyFunction) {
  const result = fn(); // result类型为unknown,需显式收窄后使用
  if (typeof result === 'string') {
    console.log(result.toUpperCase());
  }
}

// 可传入任意参数和返回值的函数
handleFunction((id: number, active: boolean) => ({ id, active }));
handleFunction(() => new Date());

这种方案通过泛型的兼容性覆盖所有函数类型,既符合lint规则,又能在调用时保持类型安全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:08:12