TypeScript 对象类型转换,当两个对象的键名不同时
TypeScript object type casting, when the two objects differ by key name(s)
之前可能有人问过这个问题,但我有一种情况,我有一个后端期望的对象类型,如下所示:
type TagTypeThatMyBackendWants = {
id: string;
name: string;
}
由两个字符串类型的键组成,键名为id和name。我从我的后端获取这些类型的标记对象,我的后端也期望返回这些对象。现在,问题是我正在使用处理这些标签的库,但该库希望对象看起来像这样:
type TagTypeThatALibraryWants = {
id: string;
text: string;
}
所以它基本上是同一个对象,但是库需要一个字符串类型的文本键,而不是字符串类型的名称键。我已经通过来回进行一些自定义映射来解决这个问题,但这提出了一个问题,是否有“官方”或推荐的方法来做这样的事情——比如从一种对象类型转换为另一种对象类型,并且能够告诉 TypeScript 名称键“映射”到文本键,反之亦然。
不要想太多:
function backendToLibrary(input: TagTypeThatMyBackendWants): TagTypeThatALibraryWants {
return {
id: input.id,
text: input.name
}
}
看这样的问题很诱人,特别是如果您需要多次这样做并思考:也许这里有一个抽象。
但最终您知道属性是如何映射的,因此如果您要 use/write 一个通用的映射实用程序,您仍然需要为每个特定情况配置此实用程序,最终导致的结果比如果你真的只是为每个案例写出来。
除非我遗漏了一个用例,否则我认为做一些更复杂的事情没有好处。
之前可能有人问过这个问题,但我有一种情况,我有一个后端期望的对象类型,如下所示:
type TagTypeThatMyBackendWants = {
id: string;
name: string;
}
由两个字符串类型的键组成,键名为id和name。我从我的后端获取这些类型的标记对象,我的后端也期望返回这些对象。现在,问题是我正在使用处理这些标签的库,但该库希望对象看起来像这样:
type TagTypeThatALibraryWants = {
id: string;
text: string;
}
所以它基本上是同一个对象,但是库需要一个字符串类型的文本键,而不是字符串类型的名称键。我已经通过来回进行一些自定义映射来解决这个问题,但这提出了一个问题,是否有“官方”或推荐的方法来做这样的事情——比如从一种对象类型转换为另一种对象类型,并且能够告诉 TypeScript 名称键“映射”到文本键,反之亦然。
不要想太多:
function backendToLibrary(input: TagTypeThatMyBackendWants): TagTypeThatALibraryWants {
return {
id: input.id,
text: input.name
}
}
看这样的问题很诱人,特别是如果您需要多次这样做并思考:也许这里有一个抽象。
但最终您知道属性是如何映射的,因此如果您要 use/write 一个通用的映射实用程序,您仍然需要为每个特定情况配置此实用程序,最终导致的结果比如果你真的只是为每个案例写出来。
除非我遗漏了一个用例,否则我认为做一些更复杂的事情没有好处。