TypeScript如何描述带属性的可调用类型?怎么正确调用示例函数?
1. 带属性的可调用类型的描述方法
你代码中定义的DescribableFunction就是TypeScript中描述这类混合类型的标准写法:在同一个类型声明中同时定义调用签名和额外属性即可,调用签名用来描述函数的入参、返回值规则,额外属性用来描述函数上挂载的自定义属性,这个类型定义本身没有问题。
2. doSomething函数的正确调用方式
你收到报错的核心原因是:普通对象无法被TypeScript识别为可调用的函数类型,你传入的{description="how are you", (9)=>return true;}不仅语法不符合JS对象规范,也无法满足「既是可调用函数、又带description属性」的类型要求。
正确的实现逻辑是:先创建符合调用签名规则的函数,再给这个函数挂载要求的description属性,再将函数作为入参传入doSomething即可,示例代码如下:
type DescribableFunction = { description: string; (someArg: number): boolean; }; function doSomething(fn: DescribableFunction) { console.log(fn.description + " returned " + fn(6)); } // 正确调用方式1:分步定义 const checkNum = (num: number) => { return num > 5; } checkNum.description = "how are you"; doSomething(checkNum); // 输出:how are you returned true // 正确调用方式2:用Object.assign一行实现 doSomething( Object.assign( (n: number) => n > 5, { description: "how are you" } ) );
内容的提问来源于stack exchange,提问作者Nithyashree B L
相关产品推荐
相关产品推荐

