在 JavaScript 中,如果我想遍历一个字典并设置另一个字典的属性,我会使用这样的东西:
for (let key in dict) {
if (obj.hasOwnProperty(key)) {
obj[key] = dict[key];
}
}
如果obj
是 TypeScript 对象(类的实例),有没有办法执行相同的操作?
在 JavaScript 中,如果我想遍历一个字典并设置另一个字典的属性,我会使用这样的东西:
for (let key in dict) {
if (obj.hasOwnProperty(key)) {
obj[key] = dict[key];
}
}
如果obj
是 TypeScript 对象(类的实例),有没有办法执行相同的操作?
如果 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,但这不是您在这里提出的问题。
您可能只使用ECMAScript 6的Object.assign(obj, dict);
.
我想到了TypeScript 的扩展运算符,但我认为它不适用,因为那是为了创建一个新对象,你想覆盖现有类中的属性。
需要注意的是它只是一个浅拷贝,如果存在,它将调用目标类中的 setter。
我发现 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