我正在尝试调试TypeScript 3.1,Babel 7和Webpack 4所遇到的怪异问题,这些问题仅在手动构建对象时才起作用。这是一个示例(伪代码):
B (请参见下面的img):
const objectOfObjects = {...}
const someKeys = ['key1', 'key2', 'key3']
someKeys.filter(key => {
const i = new Foo(objectOfObjects[key]['somePropName'], /* subsequent props */);
console.log(i); // when I inspect the object here values are set correctly
return predicate(i);
});
但是,我不必为每个属性手动输入objectOfObjects[key]['somePropName']
,而只是传递给定TypeScript接口的对象,并将其传递给构造函数,并使其成为Object.assign。
A (请参见下面的img):
const objectOfObjects = {...}
const someKeys = ['key1', 'key2', 'key3']
someKeys.filter(key => {
const i = new Foo(objectOfObjects[key]);
console.log(i) // this does also return and object, but with all props undefined
return predicate(i);
});
Foo扩展了以下基类
class FooBase {
constructor(o: IFoo) {
if (o) {
Object.assign(this, o);
}
}
}
当我举一个非常简单的示例时,它似乎正在工作,但是无论如何,当我在真实应用程序中将objectOfObjects[key]
传递给Foo的构造函数时,我会得到:
当我遍历它并尝试查找objectOfObjects[key]
中的更改时,我能想到的唯一区别是我在上图中突出显示的内容–只是在chrome控制台中对象的左侧。我无法从Google搜索中找到任何文档,因此希望你们中的一个知道它的意思,并希望它也可以表明我在这里做错了。
答案 0 :(得分:0)
在不知道--to=to
Version up to which to apply migrations. Only available with a single package being updated, and only on migrations only. Requires from to be specified. Default to the installed version detected.
是什么的情况下很难说出来,但是这些似乎是您记录的对象内的属性名称。当将您的代码编译成JavaScript时,TypeScript编译器会生成类似的属性。
答案 1 :(得分:0)
就像特德·霍普(Ted Hopp)所说的那样,很难从您提供的小片段中分辨出发生了什么。
我认为在A中,您只有f t(e)
的构造函数,因为它是从IFoo
复制的构造函数,这是由于引用引用是平坦的。
Object.assign()
仅进行平面复制,并且忽略所有undefined
和null
值。也许可以快速检查一下:由于您正在调用const i = new Foo(objectOfObjects[key]);
,因此对象objectOfObjects[key]
必须是IFoo
并且需要具有所有值,因此您想平面复制。
由于在调试器中完成了对象展开的工作,因此您可以尝试在该处找到一个断点,然后再次检查对象真正包含的内容。
老实说,这些只是猜测,我以后可能会删除此答案。