【发布时间】:2021-06-08 19:49:51
【问题描述】:
我正在使用 typescript 版本 ^4.1.3 并且有一个包含专辑和艺术收藏的 REST API。在将请求响应发送到 Web 客户端之前,我从集合中删除了 userId。
请查看我的 DynamoDB 表中的 Album 和 Arts 接口,以及从集合对象中删除 userId 属性的实用方法。
export interface Album {
userId: string;
albumId: string;
creationDate: string;
visibility: AlbumVisibility;
title: string;
description: string;
coverUrl: string;
}
export interface Art {
albumId: string;
artId: string;
sequenceNum: number;
userId: string;
creationDate: string;
title: string;
description: string;
imgUrl: string;
}
export function rmUserIdFromArr(items: Album[] | Art[]) {
return items.map((item: Album | Art) => {
const { userId, ...newItem } = item;
return newItem;
});
}
但是当我在艺术项目集合中运行代码时,Typescript 抱怨:
const arts = rmUserIdFromArr(result.items).map((item) => ({
...item,
imgUrl: getDownloadSignedUrl(getFsArtsFolder(item.albumId), item.artId),
}));
属性“artId”不存在于类型“{ albumId: string;创建日期:字符串;可见性:>相册可见性;标题:字符串;描述:字符串;封面网址:字符串; } | { 专辑 ID:字符串; >artId:字符串;序列号:数字;创建日期:字符串;标题:字符串;描述:字符串; >imgUrl:字符串; }'。 类型 '{ albumId: string; 上不存在属性 'artId'创建日期:字符串;可见性:>相册可见性;标题:字符串;描述:字符串;封面网址:字符串; }'.ts(2339)
这对我来说很奇怪,因为 artId 存在于 Art 接口类型中。
我在这里遗漏了什么吗?我知道我可以解决将地图功能中的项目设置为 item: any 的问题,但我想知道是否有更好的方法来解决这个问题。
const arts = rmUserIdFromArr(result.items).map((item: any) => ({
非常感谢, BR。
【问题讨论】:
-
请考虑修改这个问题中的代码以构成一个minimal reproducible example,当它被放入像The TypeScript Playground这样的独立IDE中时,清楚地展示了您面临的问题(所以没有未声明的类型或值;唯一存在的错误应该是您要询问的错误)。这将使那些想要帮助您的人立即着手解决问题,而无需首先重新创建它。它将使您得到的任何答案都可以针对定义明确的用例进行测试。
-
如果内部映射迭代
item具有类型Album会发生什么?
标签: typescript