如何在 Typescript 中将给定类型的所有属性转换为另一个类型?

黎阮辉

例如,我有

type EmployeeDTO = {
  firstName: string
  lastName: string;
  dateOfBirth: Date;
}

并且我想要一个实用程序类型来将所有类型的属性转换Datemoment

type EmployeeDTO = {
  firstName: string
  lastName: string;
  dateOfBirth: moment;
}
黎阮辉

使用ModifyProp下面的。这是可以玩的沙盒

type ModifyProp<T extends {}, TFrom, TTo> = {
  [K in keyof T]: Exclude<T[K], undefined> extends TFrom
  ? TTo
  : Exclude<T[K], undefined> extends {}
  ? ModifyProp<T[K], TFrom, TTo>
  : T[K];
};

type Foo = {
  date: Date;
  optionalDate?: Date;
  foo: number;
  bar?: string;
  nested: {
    date: Date;
    optionDate?: Date;
    foo: number;
    bar?: string;
  }
}

type ModifiedFoo = ModifyProp<Foo, Date, 'moment'>;
/*
{
  date: 'moment';
  optionalDate?: 'moment';
  foo: number;
  bar?: string;
  nested: {
    date: 'moment';
    optionDate?: 'moment';
    foo: number;
    bar?: string;
  }
}
*/

注意:上面的代码与问题中的 2 个附加测试用例一起使用,它们是:

  • 可选属性(这就是我使用Exclude<T[K], undefined>而不是的原因T[K]
  • 和嵌套属性(这就是我添加条件的原因Exclude<T[K], undefined> extends {})

上面的示例代码已经演示了这 2 个测试用例。随意修改它以满足您的需要。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 TypeScript 中将 JSON 对象转换为另一个对象

如何在 typescript ReactJs 中将一个类的对象转换为另一个类的对象?

如何在TypeScript中从另一个模块引用现有类型?

如何在Typescript 3.0中将元组“映射”到另一个元组类型

TypeScript:如何根据另一个对象的类型有条件地创建一个类型所需的属性?

如何在Typescript中将接口转换为映射类型

如何在Typescript中将类型转换为接口

Typescript - 如何将部分类型分配给另一个对象的相同类型的属性?

TypeScript:如何使用变量推断的类型在类外部定义具有相同类型的另一个变量

Typescript:如何声明一个包含所有扩展通用类型的类型的类型?

如何在 TypeScript 中将数组类型隐式转换为元组类型?

如何在 Typescript 中将 tf.Tensor 类型转换为数字类型

如何在Typescript中将类型注入函数?

如何在Typescript中将值从一个类的方法传递给另一个类的方法?

从另一个变量Typescript的属性获取类型

如何在TypeScript中覆盖类型属性

如何将一个 typescript 类对象转换为另一个,其中只有值发生变化而键保持不变?

如何在Typescript中将缺少字段的对象转换为Typescript?

如何在 TypeScript 中将未知类型转换为字符串?

如何在Typescript中将字符串转换为字符串文字类型?

如何在Python中将一个对象的所有属性复制到另一个对象?

如何在Java中将一个列表转换为另一个列表?

如何在Java中将一个枚举转换为另一个枚举?

如何在Typescript中将属性的类型设置为两个ENUM的组合?

如何使用从另一个.d.ts文件导出的类型来扩展Typescript界面?

如何在 TypeScript 中将一种类型与另一种类型相关联

如何在d.ts文件中导入类型(从另一个文件)而不将其转换为模块?

如何根据另一个属性的键在接口中键入属性在 TypeScript 中具有未知结构?

如何在opencv中将某个RGB值的所有像素替换为另一个RGB值