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

dagda1

我正在使用Typesafe的Typescript创建对象映射器。

我可以使用此操场和此代码在一个层次上深入工作

enum TransformerActions { 
  Delete = 'delete',
}

type TransformerMap<S> = { 
  [P in keyof S]?: S[P] extends object
    ? ((s: S) => any) | TransformerActions
  : S[P];
};

interface Name { 
  forename?: string;
  surname?: string;
}

type Person = { currentName: Name, previousNames: Name[] }

const personTransformer1: TransformerMap<Person> = {
  currentName: TransformerActions.Delete
}

const personTransformer2: TransformerMap<Person> = {
  currentName: (s) => s.currentName.forename + ' ' + s.currentName.surname
}

但是,如果我想将其设为递归类型,以便每个嵌套键都可以进行转换,则无法获取语法,请尝试以下操作:

type TransformerMap<S> = { 
  [P in keyof S]?: S[P] extends object
    ? TransformerMap<S[P]>
  : S[P] | ((s: S) => any) | TransformerActions;
};

但这不起作用。

如何以这种方式创建递归类型。

贾科莫·德·利贝拉利

如果我理解正确,那么这样的事情呢?

enum TransformerActions {
  Delete = 'delete',
}

type TransformerFunc<T> = (src: T) => Partial<T>

type TransformerMap<S> = {
  [P in keyof S]?: S[P] | TransformerFunc<S[P]> | TransformerActions | TransformerMap<S[P]>;
};

interface Name {
  forename?: string;
  surname?: string;
}

type Person = { currentName: Name, previousNames: Name[], child: Person }

const personTransformer1: TransformerMap<Person> = {
  currentName: TransformerActions.Delete
}

const personTransformer2: TransformerMap<Person> = {
  currentName: {
    forename: TransformerActions.Delete
  },
  child: {
    currentName: (child) => {
      return {
        forename: `${child.forename?.toUpperCase()} ${child.surname?.toUpperCase}`,
        surname: TransformerActions.Delete
      }
    },
    child: TransformerActions.Delete
  }
}

查看操场示例

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在打字稿中映射对象类型

来自分类Dev

hadoop映射器中对象类型的键

来自分类Dev

打字稿映射对象返回类型

来自分类Dev

打字稿中的对象类型

来自分类Dev

RestKit中xml的对象映射器

来自分类Dev

自动映射器-根据映射对象的类型设置值

来自分类Dev

在打字稿中声明对象类型

来自分类Dev

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

来自分类Dev

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

来自分类Dev

将服务器返回的内容映射到 Angular 服务中的打字稿类型

来自分类Dev

接口的打字稿类型映射

来自分类Dev

如何根据打字稿中的数组定义映射类型?

来自分类Dev

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

来自分类Dev

自动映射器,将一种对象成员类型映射到多种具体类型

来自分类Dev

打字稿:定义对象的类型

来自分类Dev

打字稿对象数组类型

来自分类Dev

对象类型的打字稿联合

来自分类Dev

在数据映射器模式中创建对象数组

来自分类Dev

在自动映射器选项中传递多个对象

来自分类Dev

自动映射器:将类型对象上的单个成员映射到对象的Icollection

来自分类Dev

自动映射器:将类型对象上的单个成员映射到对象的Icollection

来自分类Dev

自动映射器映射对象

来自分类Dev

打字稿递归类型交集

来自分类Dev

打字稿中包含联合类型的对象的区别联合

来自分类Dev

联合类型的部分键作为打字稿中对象的键

来自分类Dev

使用const作为打字稿中的对象和类型?

来自分类Dev

复杂对象中的自动映射器和映射列表/嵌套映射

来自分类常见问题

减速器中的打字稿类型问题

来自分类Dev

减速器中的打字稿类型问题

Related 相关文章

热门标签

归档