typescript - 如何用方法声明对象的类型?
问题描述
我有一个对象如下 -
type Person = {
firstname: string,
lastname: string,
}
let person: Person = {
firstname: "John",
lastname: "Doe",
fullname: function() {
return `${this.firstname} ${this.lastname}`
}
}
如何声明全名方法的类型?
解决方案
这取决于你想要多少打字。
选项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}`
}
}
推荐阅读
- node.js - 导出并要求异步函数错误
- sql - Oracle 11g 如何对来自两个不同列的值进行分组
- java - 在 Servlet 过滤器中获取分块 HttpServletResponse 的 contentLength
- .net - x64 .Net 核心中的 NLUA 错误图像异常
- revolution-slider - 带视频的旋转滑块:连接已关闭
- sql - SQL查询重叠时间低估
- python - Python Numpy Unwrap 函数无法按预期工作
- ios - 类型“MyWeather”不符合协议“Encodable”错误
- python - 使用不同类型的列进行过滤
- java - java ouaf上的类转换异常