如何声明兼具自调用特性与方法属性的可调用函数类型?
实现兼具自调用与方法属性的函数
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
相关产品推荐
相关产品推荐

