javascript - 确保我的函数返回变异对象作为同一类 typescript 的实例?

标签 javascript typescript javascript-objects immutability

export const FilterUndefined = <T extends object>(obj: T): T => {
  return Object.entries(obj).reduce((acc, [key, value]) => {
    return value ? { ...acc, [key]: value } : acc;
  }, {}) as T;
};

我正在迁移数据库和清理旧数据结构的一部分,一些键的一些值最终变成了字面值 undefined .该键仍将存在,并将具有值 undefined
我做了这个函数,但是用它修改了一个类对象后,它将不再是同一个类的实例。我怎样才能让它返回一个与输入参数是同一类的实例的对象?

as T 使 TS 编译器闭嘴,仅此而已。

我还尝试获取该对象的原型(prototype)和 return new prototype(obj)return new prototype.constructor(obj)
原型(prototype)的控制台日志如下所示:
PROTOTYPE TestClass {}

我正在使用此设置进行测试:
  it('should return the same type that it receives', () => {
    class TestClass {
      name: string;
      optionalProperty?: any;
    }

    let testObject = new TestClass();
    testObject.name = 'My Name';
    testObject.optionalProperty = undefined;

    console.log(testObject instanceof TestClass);
    testObject = FilterUndefined(testObject);

    console.log(testObject instanceof TestClass);
    console.log(testObject);

    expect(testObject).instanceOf(TestClass);
  });

编辑:JSFiddle:https://jsfiddle.net/3sdg98xt/2/但是从 vscode 复制粘贴没有任何问题运行它我得到一个错误'execpted expression, got';'

最佳答案

此解决方案将通过删除具有未定义值的键来改变输入对象。

function removeUndefined <T>(object: T): T {
    for (const id in object) {
       if (object[id] === undefined) {
          delete object[id];
       }
    }
    return object;
}

它似乎适用于您的测试用例:Test in typescript playground

关于javascript - 确保我的函数返回变异对象作为同一类 typescript 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59156082/

相关文章:

javascript - 如何在 JavaScript 中使用数组和对象输入编写最快的选择函数?

javascript - 是否有任何对象属性可以提取javascript中的嵌套键?

javascript - 当用户单击通知 Div 之外的任意位置时,使通知 Div 淡出

javascript - 错误类型错误 : "this.posts is undefined" - in an angular type script class

javascript - 如何在 JavaScript 中引用抽象对象键?

Angular:自定义 formControl 上的指令导致错误

javascript - TypeScript 的 tsc 编译器在调用 jQuery 和 Flot 代码时发出错误

javascript - 文本区域和向上翻页

javascript - 如何使用谷歌访问 token 获取电子邮件地址?

javascript - 在 iOS 和 Android 上使用 React Native 时,我还能使用原生第三方库吗?