在“typescript”中克隆对象时,如何解决类型错误?

在“typescript”中克隆对象时,如何解决类型错误?,typescript,Typescript,我有下面的代码。我有两种类型,一种是MyType,另一种是MyTypeDto。我想将MyType的实例克隆到MyTypeDto,但在赋值行上有一个编译错误:Type'string | boolean | Date'不能赋值给Type'undefined'。类型“字符串”不能分配给类型“未定义”。 我怎样才能解决这个问题呢 interface MyType { str: string; bool: boolean; d: Date; ... } interface MyType

我有下面的代码。我有两种类型,一种是
MyType
,另一种是
MyTypeDto
。我想将
MyType
的实例克隆到
MyTypeDto
,但在赋值行上有一个编译错误:
Type'string | boolean | Date'不能赋值给Type'undefined'。类型“字符串”不能分配给类型“未定义”。

我怎样才能解决这个问题呢

interface MyType {
  str: string;
  bool: boolean;
  d: Date;
   ...
}

interface MyTypeDto {
  str?: string;
  bool?: boolean;
  d?: Date;
  name?: string;
  ...
}

const t: MyType = {
    str: "",
    bool: false,
    d: new Date(),
};

const keys = Object.keys(t);
const dto: MyTypeDto = {};

keys.forEach((key: string) => {
    dto[key as keyof MyTypeDto] = t[key as keyof MyType];  // error here
});

我认为这是实现这一目标的最佳途径。是制作自定义复制功能

constcopy=(myType:myType):MyTypeDto=>{
const{str,bool}=myType;
返回{
str,
布尔
}
}
你也可以看看。字面上以去结构命名,即分解结构。这就是你现在需要的

为数不多的财产。您可以使用
ts transform keys
从中获取接口键

从'ts transformer key'导入{keys};
接口MyType{
str:字符串;
布尔:布尔;
d:日期;
}
const keysOfMyType=keys();
console.log(keysOfMyType);//['str','bool','d']

为什么要使用循环来克隆obj?如何
Object.assign(dto,t)
MyType
中会有更多的字段,这些字段在
MyTypeDto
中是不存在的。实际情况下有60多个字段,这是我想要避免的。@Joey Yizhao添加了一个方法,该方法可以处理接口中的多个属性