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

如何声明兼具自调用特性与方法属性的可调用函数类型?

实现兼具自调用与方法属性的函数

JavaScript 实现

在 JavaScript 中,函数属于一等对象,因此可以直接给函数实例添加属性(方法),轻松实现兼具自调用和方法属性的效果:

// 定义可自调用的函数主体
function hello(name) {
  console.log(`Hello, ${name}!`);
}

// 为函数添加方法属性
hello.hi = function(name) {
  console.log(`Hi, ${name}!`);
};

hello.bye = function(name) {
  console.log(`Bye, ${name}!`);
};

// 调用测试
hello('Lucy'); // 输出: Hello, Lucy!
hello.hi('John'); // 输出: Hi, John!
hello.bye('Marie'); // 输出: Bye, Marie!

TypeScript 类型声明与实现

如果需要在 TypeScript 中明确声明这种兼具函数调用和方法属性的类型,可以使用交叉类型(&)将函数类型与包含方法的对象类型合并:

// 定义类型:既是接收string参数的函数,又包含hi、bye方法
type HelloType = ((name: string) => void) & {
  hi: (name: string) => void;
  bye: (name: string) => void;
};

// 实现函数并指定类型(需用类型断言告知TS该函数会包含后续添加的方法)
const hello: HelloType = ((name: string) => {
  console.log(`Hello, ${name}!`);
}) as HelloType;

// 添加方法属性
hello.hi = (name: string) => {
  console.log(`Hi, ${name}!`);
};

hello.bye = (name: string) => {
  console.log(`Bye, ${name}!`);
};

// 调用测试
hello('Lucy');
hello.hi('John');
hello.bye('Marie');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:10