在打字稿中映射对象类型

拉尔12

我正在寻找打字稿中“映射”对象类型的方法。

我输入以下内容:

interface Factory<T>{
     serialize: (val: T)=>void,
     deserialize: ()=>T,
}
interface MyDict{
     [key: string]: Factory<any>
}

function deserialize(dict: MyDict){
     let mapped = {};
     for(let k in dict){
          mapped[k] = dict[k].deserialize();
     }
     return mapped;
}

我想要的是正确确定地图的返回类型。

因此,在执行此操作时:

let mapped = map({
    foo: {deserialize: ()=>'hello world'}, 
    foo2: {deserialize: ()=>123}, 
    foo3: {deserialize: ()=>({foo4: 'foo4'})}
});

映射的类型应为{foo: string, foo2: number, foo3: {foo4: string}}

提香·切尔尼科娃·德拉戈米尔

您可以使用映射类型来执行此操作。为了捕获参数的实际类型,该函数还需要是通用的:

interface Factory<T>{
     serialize?: (val: T)=>void,
     deserialize: ()=>T,
}
interface MyDict{
     [key: string]: Factory<any>
}

type FactoryReturnType<T extends MyDict> = {
    [K in keyof T]: ReturnType<T[K]['deserialize']>
}

function deserialize<T extends MyDict>(dict: T){
     let mapped = {} as FactoryReturnType<T>;;
     for(let k in dict){
          mapped[k] = dict[k].deserialize();
     }
     return mapped;
}

let mapped = deserialize({
    foo: {deserialize: ()=>'hello world'}, 
    foo2: {deserialize: ()=>123}, 
    foo3: {deserialize: ()=>({foo4: 'foo4'})}
});

mapped.foo3.foo4

游乐场链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在打字稿中声明对象类型

来自分类Dev

如何在打字稿中定义对象类型的对象

来自分类Dev

在打字稿中映射类

来自分类Dev

在打字稿函数中声明“ this”的类型?

来自分类Dev

在打字稿中创建数组类型

来自分类Dev

打字稿中的递归对象映射器类型

来自分类Dev

无法在打字稿中创建对象

来自分类Dev

打字稿映射对象返回类型

来自分类Dev

打字稿中的对象类型

来自分类Dev

如何在打字稿中获取对象值作为类型?

来自分类Dev

如何在打字稿中键入以下对象/类型

来自分类Dev

在打字稿中声明“返回类型”的简写

来自分类Dev

您可以在打字稿中动态扩展类型吗?

来自分类Dev

在打字稿中,如何定义异步功能的类型

来自分类Dev

如何在打字稿中声明地图类型?

来自分类Dev

在打字稿中为嵌套名称空间创建类型

来自分类Dev

如何在打字稿中公开API返回的类型

来自分类Dev

在打字稿中抽象出通用类型参数

来自分类Dev

在打字稿中检查API响应的类型

来自分类Dev

在打字稿中检查可选道具类型时出错

来自分类Dev

如何在打字稿中检查数组的类型

来自分类Dev

使用类的方法在打字稿中创建联合类型

来自分类Dev

如何在打字稿中获得“这个”类型

来自分类常见问题

如何在打字稿中组合对象属性?

来自分类Dev

在打字稿中扩展角度全局对象

来自分类Dev

在打字稿中,我可以使用键列表从对象中删除未定义和空类型吗?

来自分类Dev

打字稿保持对象上的类型信息映射

来自分类Dev

打字稿错误分配/映射到强类型对象

来自分类Dev

接口的打字稿类型映射