如何在Typescript中映射值?

huangapple go评论70阅读模式
英文:

How do I map values in Typescript?

问题

我正在尝试创建一个enrich-object函数,但我无法弄清楚如何更改Type中值的类型。

所以,给定以下类型:

{ a: string, c: number }
{ a: boolean, b: Cow }

我希望返回的类型分别为:

{ a: Container<string>, c: Container<number> }
{ a: Container<boolean>, b: Container<Cow> }

到目前为止,我最接近的方法是使用Record工具:

enrich<T>(value: T) {
  // 通过迭代对象键创建映射对象
  return container as Record<T, Container<any>>
}

但这会将所有对象的值类型更改为Container<any>,从输入中删除了部分上下文。

英文:

I am trying to make an enrich-object function, but I can't figure out how to change the type of the values inside a Type.

So given the following types

{ a: string, c: number }
{ a: boolean, b: Cow }

I want the returned type to respectively be

{ a: Container&lt;string&gt;, c: Container&lt;number&gt; }
{ a: Container&lt;boolean&gt;, b: Container&lt;Cow&gt; }

The closest I've gotten is using the Record util

enrich&lt;T&gt;(value: T) {
  // create mapped object by iterating over object keys
  return container as Record&lt;T, Container&lt;any&gt;&gt;
}

But that changes all of the objects value types to Container&lt;any&gt;, erasing part of the context from the input.

答案1

得分: 4

你可以使用映射类型来实现这个:

type Enrich&lt;T&gt; = {[key in keyof T]: Container&lt;T[key]&gt;};
英文:

You can use mapped types for this:

type Enrich&lt;T&gt; = {[key in keyof T]: Container&lt;T[key]&gt;};

huangapple
  • 本文由 发表于 2023年6月5日 11:00:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/76403272.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定