首页 > 解决方案 > 如何用方法声明对象的类型?

问题描述

我有一个对象如下 -

type Person = {
  firstname: string,
  lastname: string,
}

let person: Person = {
   firstname: "John",
   lastname: "Doe",
   fullname: function() {
     return `${this.firstname} ${this.lastname}`
   }
}

如何声明全名方法的类型?

标签: typescript

解决方案


这取决于你想要多少打字。

选项1

如果你想要一些能准确告诉你函数返回什么的东西fullName(),你可以使用泛型和模板文字来实现它,如下所示:

type Person<FirstNameT extends string, LastNameT extends string> = {
  firstname: FirstNameT,
  lastname: LastNameT,
  fullname: () => `${FirstNameT} ${LastNameT}`
}

let person: Person<"John", "Doe"> = {
   firstname: "John",
   lastname: "Doe",
   fullname: function() {
     return `${this.firstname} ${this.lastname}` // typed as () => "John Doe"
   }
}

选项 2

如果您不关心返回的文字类型,您可以使用更简单的方法,例如:

type Person = {
  firstname: string,
  lastname: string,
  fullname: () => `${Person["firstname"]} ${Person["lastname"]}`
}

let person: Person = {
   firstname: "John",
   lastname: "Doe",
   fullname: function() {
     return `${this.firstname} ${this.lastname}` // typed as () => `${string} ${string}`
   }
}

推荐阅读