如何在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
相关产品推荐
相关产品推荐

