如何键入需要返回对象副本同时还更改其属性之一的类型的函数?
Posted
技术标签:
【中文标题】如何键入需要返回对象副本同时还更改其属性之一的类型的函数?【英文标题】:How to type a function that needs to return a copy of an object while also changing the type of one of its properties? 【发布时间】:2021-01-20 05:10:04 【问题描述】:我想用以下代码完成什么:
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
参数并返回正确的类型?
这是我得到的错误:
注意:在我的真实场景中,我还有一些其他重载(即:我将使用扩展“基础”interface myDate: Date
的多种类型来调用它,因此我制作了一个我将调用它的重载列表有,但我需要键入实现,它应该类似于上面的示例。
【问题讨论】:
【参考方案1】:您可以轻松地构造所需类型的对象,而无需键入错误的帮助器。
使用错误类型的帮助器对象并安抚编译器是一种技术,如果您知道您将更正类型以匹配其广告接口,但在您发布的示例中没有必要诉诸此类技巧。
function convertDateToString(obj: SOME_OBJECT_DATE): SOME_OBJECT_STRING
return
...obj,
myDate: obj.myDate.toJSON()
;
Playground link
【讨论】:
感谢您的回答,@Lesiak。很抱歉造成混乱。我已经更新了示例并忘记更改函数的名称。现在会修复它。我明白我做错了什么。我试图用“两步”构建新对象,而不是一次完成。以上是关于如何键入需要返回对象副本同时还更改其属性之一的类型的函数?的主要内容,如果未能解决你的问题,请参考以下文章