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

TypeScript中如何描述对象类型的函数并正确调用?

问题原因及解决方法

你遇到的错误核心是给fn定义的类型不对:你把fn的类型设为{}(空对象类型),但TypeScript里{}代表一个没有任何属性和方法的空对象,自然不具备可调用的“函数签名”,所以调用b.fn()时会报错。

正确的类型定义方式

方式1:直接在对象类型中指定函数类型

把fn的类型改成对应函数的类型签名(你的fn是无参数、返回值为void的函数,所以用() => void):

let b: { name: string; fn: () => void }

b = {
  name: 'derek',
  fn: (): void => {
    console.log('i am a function')
  }
}

console.log(b.fn())

方式2:用接口规范类型(更推荐,适合复杂结构)

如果后续要复用这个对象类型,用接口定义更清晰:

interface Person {
  name: string;
  // 明确fn是无参数、返回void的函数
  fn: () => void;
}

let b: Person = {
  name: 'derek',
  fn: () => {
    console.log('i am a function')
  }
}

console.log(b.fn())

关于你尝试的类型断言

你写的console.log(b.<object>fn())是错误的语法,TypeScript的类型断言正确写法是console.log((b.fn as () => void)()),但这种方式只是临时“骗过”编译器,不如一开始就给对类型靠谱。

内容的提问来源于stack exchange,提问作者LYJC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:25:52