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
相关产品推荐
相关产品推荐

