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