TypeScript-复制带有排除项的对象属性

时间:2019-07-11 09:52:27

标签: typescript

TS中是否有一种方法可以将属性复制到另一个对象(不包括其中的某些对象)而不使用循环?如果我有给定接口的两个对象共享 some 属性,则可以使用spread运算符将一个对象复制到另一个对象,但是还可以复制原始对象的其他属性。实际上,我只想复制相交的。

2 个答案:

答案 0 :(得分:1)

如果您要创建一个包含两个Object属性的交集的对象,则可以手动执行此操作或查找执行此操作的库。进行此类操作的一种流行方法是lodash,它提供了有用的功能来解决该问题,例如intersection

var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };

_.intersection(_.keys(a), _.keys(b)); // ['c']

尽管您需要相应的类型,但由于lodash本身不提供这些类型,因此您需要安装由社区维护的类型(在this package中)。

答案 1 :(得分:0)

据我所知,您正在尝试将TypeScript中的两个接口相交。如果正确,那么您正在寻找一种在TypeScript中将两种类型相交的方法。

尽管标准库中没有通用类型可以执行此操作,但是存在一个包含很多通用实用程序类型的库,可以对类型执行此类操作。

这里是Intersection type from the lib utility-types

  

Intersection<T, U>

     

T中选择U中存在的属性

自述文件的用法:

import { Intersection } from 'utility-types';

type Props = { name: string; age: number; visible: boolean };
type DefaultProps = { age: number };

// Expect: { age: number; }
type DuplicatedProps = Intersection<Props, DefaultProps>;

这有效地创建了一个仅包含两个类型中都存在的属性的类型。您仍然必须警惕如果两个属性同时存在但定义不同,会发生什么情况。这里,T中的定义将优先于U中定义的类型。