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

如何为带有额外属性的函数foo编写TypeScript类型?

为兼具调用能力与额外属性的函数定义TypeScript类型

你可以通过两种方式定义foo的类型,匹配它既作为函数可调用、又拥有boo属性的特性:

方法一:使用接口定义调用签名与属性

通过接口同时声明函数的调用签名(作为函数被调用时的参数和返回值类型)和额外属性:

interface FooType {
  // 定义foo本身作为函数的调用签名
  (arg: string): void;
  // 定义foo的boo属性类型
  boo: (arg: string) => void;
}

// 实现foo函数并指定类型
const foo: FooType = function(arg: string) {
  // 这里写foo的逻辑
} as FooType;

// 实现foo.boo
foo.boo = (arg: string) => {
  // 这里写boo的逻辑
};

// 正常调用,类型检查会生效
foo("hello");
foo.boo("hello");

方法二:使用交叉类型

将函数类型与包含boo属性的对象类型交叉,同样能实现需求:

// 交叉函数类型和对象类型
type FooType = ((arg: string) => void) & {
  boo: (arg: string) => void;
};

const foo: FooType = function(arg: string) {
  // foo的逻辑实现
} as FooType;

foo.boo = (arg: string) => {
  // boo的逻辑实现
};

// 类型检查下的合法调用
foo("hello");
foo.boo("hello");

这两种方式都能让TypeScript正确识别foo的双重特性,既允许像普通函数一样调用,也能访问并调用它的boo属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:33:15