如何为包含方法的TypeScript对象声明对应类型?
要为fullname方法声明类型,只需要在类型定义中补充对应方法的入参和返回值描述即可,以下是几种常见场景的实现方式:
方案1:直接修改原有Person类型定义
如果所有Person类型的实例都需要包含fullname方法,直接在原类型中补充属性:
type Person = { firstname: string, lastname: string, // 声明fullname为无入参、返回值为字符串的方法 fullname: () => string } let person: Person = { firstname: "John", lastname: "Doe", fullname: function() { return `${this.firstname} ${this.lastname}` } }
如果需要更严格的this类型校验,可以显式声明方法的this指向(该参数为TS特有的虚拟参数,不会影响实际调用时的入参):
type Person = { firstname: string, lastname: string, fullname: (this: Person) => string }
方案2:不修改原类型,用交叉类型扩展
如果不想改动原有Person类型的定义,可以通过交叉类型生成扩展后的新类型:
type Person = { firstname: string, lastname: string, } // 扩展得到带fullname方法的新类型 type PersonWithFullname = Person & { fullname: () => string } let person: PersonWithFullname = { firstname: "John", lastname: "Doe", fullname: function() { return `${this.firstname} ${this.lastname}` } }
方案3:声明为可选方法
如果fullname不是所有Person实例的必填属性,可以将其声明为可选属性:
type Person = { firstname: string, lastname: string, fullname?: () => string }
内容的提问来源于stack exchange,提问作者Harshit Badolla
相关产品推荐
相关产品推荐

