【问题标题】:typescript interface: how to implements the interface which merge function interface and property interfacetypescript接口:如何实现合并函数接口和属性接口的接口
【发布时间】:2025-12-10 10:40:01
【问题描述】:

typescript接口:如何实现合并函数接口和属性接口的接口。例如:

interface keyMap {
  name: string;
  mark: number;
}

let keyMapInstance: keyMap = { name: 'John', mark: 85 }

interface development extends keyMap {
  (code: string): void
}

【问题讨论】:

    标签: typescript interface implements


    【解决方案1】:

    问题是development既有调用签名(函数可以满足)又有成员(继承keymap)。你不能在Typescript(或Javascript)中一步定义这样的对象对于这个问题)。当您分配函数时,编译器会抱怨缺少属性(因为它们还没有出现,所以应该如此)。你可以做以下两件事之一:

    使用Object.assign一步构建对象

    var me: development = Object.assign((code: string)=> console.log(code), keyMapInstance)
    

    使用类型断言并稍后完成初始化

    var me: development = <development>((code)=> console.log(code))
    me.mark = 10;
    me.name ="";
    

    变体:使字段可选,稍后完成初始化

    interface development extends Partial<keyMap> {
        (code: string): void
    }
    
    var me: development = (code)=> console.log(code)
    me.mark = 10;
    me.name ="";
    

    【讨论】:

    • 谢谢你的回答,我明白了
    【解决方案2】:

    development 接口中,我相信您正在尝试声明一个带有string 参数的void 函数。应该这样做:

    interface development extends keyMap {
      fn: (code: string) => void
    }
    

    demo

    【讨论】:

    • 实际上这取决于他想要实现的目标,在问题中拥有一个带有调用签名的接口是完全有效的。