Что означают странные «е» или «т» в консоли Chrome - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь отладить странную проблему, с которой я сталкиваюсь в TypeScript 3.1, Babel 7 и Webpack 4, где это работает только тогда, когда я создаю объект вручную.Вот пример (псевдокод):

B (см. Ниже) :

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 (см. Изображение ниже) :

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 в моем реальном приложении, я получаю это:

enter image description here

Поскольку я прошел через это и попытался найти изменения в objectOfObjects[key], единственное отличие, которое я могу вспомнить, это то, что я выделил на изображении выше - маленькие буквы "e" и "t" простослева от объекта в хромированной консоли.Я не смог найти какую-либо документацию в поиске Google, так что, надеюсь, кто-то из вас знает, что это значит, и, надеюсь, это также может указать на то, что я здесь делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Как уже сказал Тед Хопп, трудно сказать, что там происходит, из маленьких кусочков, которые вы предоставили.

Я думаю, что в А у вас есть только конструктор f t(e), потому что это конструкториз IFoo скопировано из-за плоской эталонной копии.

Object.assign() делает только плоскую копию и игнорирует все значения undefined и null.Может быть, сделаем быструю проверку: поскольку вы вызываете const i = new Foo(objectOfObjects[key]);, объект objectOfObjects[key] должен быть IFoo и должен иметь все значения, вы хотите выполнить плоское копирование.

Поскольку развертывание объекталенив в отладчиках, вы можете попытаться достичь точки останова и снова проверить, что на самом деле содержит объект.

Честно говоря, это только предположения, и этот ответ может быть позже удален мной.

0 голосов
/ 24 октября 2018

Немного трудно сказать, ничего не зная о том, что такое Foo, но это, по-видимому, имена свойств в зарегистрированном вами объекте.Компилятор TypeScript генерирует такие свойства, когда компилирует ваш код в JavaScript.

...