Javascript Typescript使用“删除对象中的其他属性”;“作为”吗;?
我想通过JSON发送一个对象,它实现了一个接口,但也有一些我不想发送的其他属性。我如何才能“删除”所有其他内容,从而拥有一个只有接口属性的纯对象 例如:Javascript Typescript使用“删除对象中的其他属性”;“作为”吗;?,javascript,typescript,Javascript,Typescript,我想通过JSON发送一个对象,它实现了一个接口,但也有一些我不想发送的其他属性。我如何才能“删除”所有其他内容,从而拥有一个只有接口属性的纯对象 例如: interface IBlock{ x:number; y:number; } class Block implements IBlock{ public z:number; } ... send(JSON.stringify(new Block() as IBlock)); responseIWant = "{x:0,y:0}
interface IBlock{
x:number;
y:number;
}
class Block implements IBlock{
public z:number;
}
...
send(JSON.stringify(new Block() as IBlock));
responseIWant = "{x:0,y:0}";
responseIGet = "{x:0,y:0,z:0}";
接口
和使用as
进行强制转换都是编译时构造,当代码实际执行时,它们在运行时不会做任何事情
您可以使用lodash
中的pick
方法:
const subset = _.pick(obj, ['x', 'y'])
或者,如果您不想引入库,可以通过分解结构来实现这一点:
const subset = (({ x, y }) => ({ x, y }))(obj);
另一种更高级的技术是使用带有
反射元数据的实际类和装饰器,以便能够在运行时更好地决定代码的内容。两种接口
和使用进行强制转换,因为
都是编译时构造,当代码运行时不会执行任何操作实际执行
您可以使用lodash
中的pick
方法:
const subset = _.pick(obj, ['x', 'y'])
或者,如果您不想引入库,可以通过分解结构来实现这一点:
const subset = (({ x, y }) => ({ x, y }))(obj);
另一种更高级的技术是使用带有反射元数据的实际类和装饰器,以便能够在运行时更好地决定代码的内容。不,因为只是对类型检查器的一个提示,它在运行时不会做任何事情。哦,我如何删除所有其他内容,没有写一个复制构造函数?一点也不。您也可以尝试,但您需要以某种方式具体化接口。不,,因为它只是类型检查器的一个提示,在运行时它不会做任何事情。哦,我如何删除所有其他内容,而不编写副本构造函数?一点也不,好的。您也可以尝试,但是您需要以某种方式具体化接口