Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript使用“删除对象中的其他属性”;“作为”吗;?_Javascript_Typescript - Fatal编程技术网

Javascript Typescript使用“删除对象中的其他属性”;“作为”吗;?

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}

我想通过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}";
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);

另一种更高级的技术是使用带有
反射元数据的实际类和装饰器,以便能够在运行时更好地决定代码的内容。

不,
因为
只是对类型检查器的一个提示,它在运行时不会做任何事情。哦,我如何删除所有其他内容,没有写一个复制构造函数?一点也不。您也可以尝试,但您需要以某种方式具体化接口。不,
,因为它只是类型检查器的一个提示,在运行时它不会做任何事情。哦,我如何删除所有其他内容,而不编写副本构造函数?一点也不,好的。您也可以尝试,但是您需要以某种方式具体化接口