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

问题描述

我要通过以下代码完成的工作:

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参数并返回正确的类型?

enter image description here

这是我得到的错误

enter image description here

注意:在我的实际情况中,我还有其他一些重载(即:我将使用扩展“ base” interface { myDate: Date }的多种类型来调用它,因此我列出了一系列重载调用它,但是我需要键入实现,它应该类似于上面的示例。

解决方法

您可以轻松构造所需类型的对象,而无需使用错误类型的帮助程序。

如果您知道将更正类型以匹配其广告接口,则可以使用一种使用错误类型的帮助器对象并使编译器满意的技术,但是在您发布的示例中,无需诉诸于此类。技巧。

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

Playground link