英文:
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<string>, c: Container<number> }
{ a: Container<boolean>, b: Container<Cow> }
The closest I've gotten is using the Record util
enrich<T>(value: T) {
// create mapped object by iterating over object keys
return container as Record<T, Container<any>>
}
But that changes all of the objects value types to Container<any>
, erasing part of the context from the input.
答案1
得分: 4
你可以使用映射类型来实现这个:
type Enrich<T> = {[key in keyof T]: Container<T[key]>};
英文:
You can use mapped types for this:
type Enrich<T> = {[key in keyof T]: Container<T[key]>};
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论