24

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

for (let key in dict) {
  if (obj.hasOwnProperty(key)) {
    obj[key] = dict[key];
  }
}

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

4

3 回答 3

30

如果 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];
  }
}

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

于 2016-02-29T04:25:14.357 回答
0

您可能只使用ECMAScript 6Object.assign(obj, dict);.

我想到了TypeScript 的扩展运算符,但我认为它不适用,因为那是为了创建一个新对象,你想覆盖现有中的属性。

需要注意的是它只是一个浅拷贝,如果存在,它将调用目标类中的 setter。

于 2019-04-25T17:36:58.033 回答
0

我发现 fp-tshas函数最适合我的用例:

const role = 'mother' as string
const rolesConst = {
  mother: 'mother',
  father: 'father'
} as const
if (has(role, rolesConst)) {
  // role's type is 'mother' | 'father'
}

https://gcanti.github.io/fp-ts/modules/ReadonlyRecord.ts.html#has

于 2022-02-11T00:42:18.247 回答