如何在TypeScript中实例化带额外属性的可调用对象?
在TypeScript中实例化带额外属性的可调用对象
你定义的namedFunction接口要求对象既是一个接受number参数返回number的函数,同时拥有一个name字符串属性。直接用对象字面量创建会触发额外属性检查导致报错,以下是几种可行的实现方式:
方法1:先创建函数再添加属性,最后类型断言
interface namedFunction { (x: number): number; name: string; } // 先实现函数逻辑 const addOne = (x: number): number => x + 1; // 为函数添加额外属性 addOne.name = "addOne"; // 通过类型断言指定为目标接口类型 const namedFunc: namedFunction = addOne as namedFunction;
方法2:使用Object.assign合并函数与属性
利用Object.assign可以将属性直接合并到函数对象上,同时绕过额外属性检查:
interface namedFunction { (x: number): number; name: string; } const namedFunc: namedFunction = Object.assign( (x: number): number => x + 1, { name: "addOne" } );
方法3:立即执行函数结合类型断言
先通过类型断言将函数标记为目标接口类型,再补充属性:
interface namedFunction { (x: number): number; name: string; } const namedFunc = ( (x: number): number => x + 1 ) as namedFunction; namedFunc.name = "addOne";
内容的提问来源于stack exchange,提问作者andypea
相关产品推荐
相关产品推荐

