【问题标题】:Filter existing object properties in Typescript过滤 Typescript 中的现有对象属性
【发布时间】:2019-06-17 09:30:25
【问题描述】:

我在 typescript 中有一个 any 对象,我需要对其进行整形,使其对给定接口有效。

我需要一种方法来创建新对象,以清除不属于类定义的属性并添加缺失的属性。

代码示例可以是:

interface ImyInterface {
  a: string;
  b: string;
  c?:string;
};

let myObject = {
  a: "myString",
  d: "other value"
};

我的问题是:有没有办法转换/过滤myObject,使其符合接口ImyInterface 的定义,并转换为此

console.log (JSON.stringify(objectA));
> {a: 'myString', b: null}

【问题讨论】:

  • 请出示您已有的代码并评论您正在努力解决的部分。

标签: javascript typescript interface graphql


【解决方案1】:

可能有一个更好的方法,但我想这是可行的:

    let otherObject: ImyInterface = { a: null, b: null };
    let x: ImyInterface = { ...otherObject, ...myObject };

第一行定义了所需接口的对象。

第二行定义了所需接口的新对象,并将otherObject 中的所有属性复制到该对象中,然后将myObject 中符合该接口的所有属性复制到该对象中。

注意:如果你只用这个试试:

let x: ImyInterface = { ...myObject };

您将看到接口的某些属性丢失的错误。因此首先创建一个“完整”对象的原因(在我的示例中为otherObject)。

【讨论】:

  • 谢谢@DeborahK,看起来是个不错的方法。在我的应用程序中,我有许多接口(从 GraphQL 定义文件生成),并且我必须确保发送的对象符合接口中定义的对象。因此,尽管我喜欢您的解决方案,但它不能扩展到许多接口定义,因为我必须为每个接口定义创建一个空对象,并且代码会变得非常混乱。
  • 有人在这里问了类似的问题:stackoverflow.com/questions/52190091/… 他们的第一个解决方案与我的类似。第二个似乎也不会“缩放”。
  • 您也许可以利用这一点:npmjs.com/package/ts-transformer-keys ...但这不是内置的,因此可能会很痛苦...并且仍然可能无法扩展。
  • 这里的信息看起来也很有趣:stackoverflow.com/questions/14425568/…
猜你喜欢
  • 2015-12-06
  • 2023-04-09
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2012-12-06
  • 2015-04-25
  • 2018-10-26
  • 2017-09-22
相关资源
最近更新 更多