如何键入需要 return 对象副本的函数,同时还更改其属性之一的类型?

How to type a function that needs to return a copy of an object while also changing the type of one of its properties?

我试图用以下代码完成的事情:

Playground link

interface SOME_OBJECT_DATE   { otherProp: boolean,  myDate: Date }
interface SOME_OBJECT_STRING { otherProp: boolean,  myDate: string }

function convertDateToString(obj: SOME_OBJECT_DATE): SOME_OBJECT_STRING {
    const newObj = {...obj} as SOME_OBJECT_STRING;
    newObj.myDate = obj.myDate.toJSON();
    return newObj;
}

此函数的主要目标是将 myDate 属性 的类型从 Date 转换为 string。但是我需要复制对象的其余部分,即:otherProp 属性.

如何更新 myDate、复制 obj 参数和 return 正确的类型?

这是我遇到的错误:

注意:在我的真实场景中,我有一些其他重载(即:我将使用扩展“基础”的多种类型来调用它 interface { myDate: Date } 所以我列出了我的重载将调用它,但我需要键入实现,它应该类似于上面的示例。

您无需 wrongly-typed 助手即可轻松构建所需类型的对象。

如果您知道您将更正类型以匹配其宣传的接口,则使用错误类型的帮助程序对象并安抚编译器是一种您可以使用的技术,但在您发布的示例中没有必要求助于这些各种技巧。

function convertDateToString(obj: SOME_OBJECT_DATE): SOME_OBJECT_STRING {
  return {
    ...obj,
   myDate: obj.myDate.toJSON()
  };
}

Playground link