You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何创建带有调用签名的可调用类型实例?

你定义的MyTest是带附加属性的可调用类型,要求实例同时满足两个条件:

  1. 是可调用的函数,接收number类型入参,返回number类型值
  2. 自带string类型的description属性

你之前三种写法的错误原因分别为:

  • 第一种仅声明了普通对象,没有可调用的函数实现,不匹配调用签名要求
  • 第二种仅声明了函数,但缺少必填的description属性,且函数返回值为string,和要求的number返回类型不匹配
  • 第三种使用对象字面量的写法本身语法错误,无法在对象字面量中直接定义调用签名的实现

正确实现方案

方案1:使用Object.assign合并函数与属性

Object.assign 会直接将函数和属性对象合并为一个实例,TypeScript可以自动识别合并后的类型符合MyTest要求:

const test: MyTest = Object.assign(
  (x: number) => x * 2, // 实现调用签名要求,入参返回均为number
  { description: 'My Name' } // 补充必填的description属性
)

调用验证:test(10) 会返回20,访问test.description会返回My Name,完全符合类型要求。

方案2:先声明函数再追加属性

如果不习惯使用Object.assign,也可以先实现符合要求的函数,再追加属性后做类型断言:

// 先实现符合调用签名的函数
const testFn = (x: number) => x + 1
// 给函数追加description属性
testFn.description = 'My Name'
// 类型断言为MyTest
const test: MyTest = testFn as MyTest

内容的提问来源于stack exchange,提问作者Quang Khải Đàm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:54:01