typescript定义一个包含额外属性的函数并正确赋值
在 javascript 中,我们要给函数表达式增加一个属性,直接如下增加即可:
const myFunction = () => {};
myFunction.prop = "some prop";
在 typescript 中,不定义类型,让函数表达式自动推断类型,仍然可以添加属性,上面的代码仍然不会报错。
但是,如果已经给函数表达式定义了类型,再添加属性就会报错:
const myFunction: () => void = () => {};
myFunction.prop = "some prop"; // Property 'prop' does not exist on type '() => void'.ts(2339)
在 typescript 并不支持在函数表达式中定义属性,如果我们要描述一个带有属性的可调用函数,只需要在对象类型中增加一个调用签名(call signature):
注意 call signature 使用 :
分隔参数与返回值,而函数表达式使用 =>
。
type MyFunction = {
prop: string;
(): void;
};
const myFunction: MyFunction = () => {};
myFunction.prop = "some prop";
// 另外也可以使用 Object.assign() 方法把声明函数与定义属性整合在一起
const myFunction: MyFunction = Object.assign(() => {}, {
prop: "some prop",
});
参考资料