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

如何在TypeScript中定义带有额外属性的函数?

TypeScript中声明带额外属性的函数

在JavaScript里,我们可以直接给函数添加额外属性:

function hello() { console.log('Hello')}
hello.rating = "super useful"

要在TypeScript中正确声明这类同时具备函数能力和额外属性的对象,有几种实用方法:

1. 定义包含函数签名的类型别名

先创建一个类型,同时描述函数的调用方式和额外属性:

type HelloFunction = {
  // 函数调用签名
  (): void;
  // 额外属性
  rating: string;
};

接着可以通过自执行函数加类型断言,或者工厂函数来生成符合该类型的函数:

// 自执行函数+类型断言
const hello = (() => {
  const fn = () => console.log('Hello');
  fn.rating = "super useful";
  return fn;
})() as HelloFunction;

// 工厂函数
function createHello(): HelloFunction {
  const fn = () => console.log('Hello');
  fn.rating = "super useful";
  return fn as HelloFunction;
}
const hello2 = createHello();

2. 使用接口声明

接口同样支持同时定义函数签名和属性,用法和类型别名类似:

interface HelloFunction {
  (): void;
  rating: string;
}

之后的函数创建方式和上面一致,通过类型断言让TypeScript认可函数的属性扩展。

3. 直接在变量声明时指定复合类型

如果不想单独定义类型别名或接口,也可以直接在变量声明时写出复合类型:

const hello: { (): void; rating: string } = (() => {
  const fn = () => console.log('Hello');
  fn.rating = "super useful";
  return fn;
})();

以上方法都能让TypeScript正确识别函数的调用行为以及额外属性,避免类型检查报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:35:34