Typescript hasOwnProperty等价

Inn*_*ve1 16 javascript object typescript typescript1.8

在javascript中如果我想循环遍历字典并设置另一个字典的属性,我会使用这样的东西:

for (let key in dict) {
  if (obj.hasOwnProperty(key)) {
    obj[key] = dict[key];
  }
}
Run Code Online (Sandbox Code Playgroud)

如果obj是Typescript对象(类的实例),有没有办法执行相同的操作?

bas*_*rat 23

如果obj是Typescript对象(类的实例),有没有办法执行相同的操作?

您的JavaScript是有效的TypeScript(更多).所以你可以使用相同的代码.

这是一个例子:

class Foo{
    foo = 123
}

const dict = new Foo();
const obj = {} as Foo;

for (let key in dict) {
  if (obj.hasOwnProperty(key)) {
    obj[key] = dict[key];
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:我Object.keys(obj).forEach(k=>甚至建议使用JavaScript,但这不是你在这里问的问题.

  • 你为什么要推荐`Object.keys(obj).forEach(k =>`over` for()`? (5认同)
  • 我有一个关于这方面的问题; 在你的情况下,你初始化foo属性,这确保它存在于生成的js代码中; 虽然如果没有定义属性,那么它根本不是生成代码的一部分.你知道为什么吗?当我尝试在某些实例上使用hasOwnProperty时,这让我感到有些惊讶,虽然我预计它会存在但是未定义. (4认同)
  • 让我们考虑一下未定义的属性,即所有在typescript`类A {prop1:string,prop2:number}中定义的属性都不会被`Object.keys`或`this.hasOwnProperty(k)`中的任何一个枚举,因为autogen javascript不了解这些属性. (3认同)