我有一个graphql端点,我从服务器提供了一个这样的对象{parentId:42,父母:{}}
对于我的更新,我仅接受此{parentId:42}
如何删除多余的父级属性,使其不发送到服务器进行突变?
我正在使用一组生成的类,对于更复杂的示例,它们如下所示。
因此,手动映射每个属性都可以,但是会使维护工作变得困难。
export type Folder = {
id: Scalars["String"];
name?: Maybe<Scalars["String"]>;
parrentFolder?: Maybe<Folder>;
parrentFolderId?: Maybe<Scalars["String"]>;
};
export type FolderInput = {
name: Scalars["String"];
parrentFolderId?: Maybe<Scalars["String"]>;
id?: Maybe<Scalars["String"]>;
};
不删除parrentFolder会产生以下错误:无法识别的输入字段'parrentFolder'
我想要一种从Folder转到FolderInput的方法,该方法可以抵抗两个对象中的更改。缺少属性的错误(存在于FolderInput而不是Folder上)很简洁,但不是必需的
答案 0 :(得分:0)
您可以简单地使用delete
运算符在类型转换后删除不需要的parrentFolder
属性。请记住,将类型脚本编译为javascript后类型会消失,因此类型定义在运行时不可用,这使得自动映射很难完成。
打字稿示例(我简化了您的打字稿):
export type Folder = {
id: string;
name?: string;
parrentFolder?: any;
parrentFolderId?: string;
};
export type FolderInput = {
name: string;
parrentFolderId?: string;
id?: string;
};
const folder: Folder = {
id: 'xxx',
name: 'yyy',
parrentFolder: {},
parrentFolderId: 'zzz'
}
const folderInput = folder as FolderInput;
console.log(folderInput);
delete folderInput['parrentFolder'];
console.log(folderInput);
编译后:
"use strict";
exports.__esModule = true;
var folder = {
id: 'xxx',
name: 'yyy',
parrentFolder: {},
parrentFolderId: 'zzz'
};
var folderInput = folder;
console.log(folderInput);
delete folderInput['parrentFolder'];
console.log(folderInput);
这是输出:
{ id: 'xxx',
name: 'yyy',
parrentFolder: {},
parrentFolderId: 'zzz' }
{ id: 'xxx', name: 'yyy', parrentFolderId: 'zzz' }
如果要继续使用原始文件夹对象,则可能需要添加深层克隆。