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

如何在TypeScript中为函数语句设置指定的函数签名类型?

实现方案

前置准备

先定义一个类型校验工具函数,用来对单个函数做MyFunc类型约束:

type MyFunc = (foo: string) => string;
const asMyFunc = (fn: MyFunc) => fn;

函数类型约束用法

1. 函数表达式(含箭头函数)

直接把函数传入工具函数即可,类型不匹配会直接在当前位置报错:

// 校验通过
const validFunc = asMyFunc((foo) => foo + 'bar');
// 直接报错,入参不符合MyFunc定义
const invalidFunc = asMyFunc(() => 'bar');

2. 函数语句(即function 函数名(){}的声明形式)

TS目前没有直接给函数声明加整体类型注解的语法,可使用4.9及以上版本支持的satisfies运算符做后置校验:

function validFunc(foo) {
  return foo + 'bar';
}
// 校验通过,无报错
validFunc satisfies MyFunc;

function invalidFunc() {
  return 'bar';
}
// 此处报错,函数类型不符合MyFunc要求
invalidFunc satisfies MyFunc;

数组内单函数独立校验

不需要给数组设置整体类型,直接给每个数组元素套用asMyFunc工具函数即可实现单独校验:

[
  asMyFunc((foo) => foo + "bar"), // 校验通过
  asMyFunc(() => "bar") // 当前位置直接抛出类型错误
]

该方案的核心是利用工具函数的入参类型约束实现单函数校验,完全不需要依赖上层数组的类型声明,不符合要求的函数会在自身绑定校验的位置抛出错误,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:06:02