Что означает странный e или t в консоли Chrome

Я пытаюсь отладить странную проблему, с которой сталкиваюсь в 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 в моем реальном приложении, я получаю следующее:

введите здесь описание изображения

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


person Dac0d3r    schedule 24.10.2018    source источник


Ответы (2)


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

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

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

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

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

person Enak    schedule 24.10.2018
comment
Спасибо, в моем конкретном случае проблема была вызвана загрузкой плагинов и пресетов в неправильном порядке в моей конфигурации веб-пакета. Вызывают всевозможные странные ошибки, потому что код был преобразован до того, как предустановленный машинописный текст Babels сделал свое волшебство. - person Dac0d3r; 01.11.2018

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

person Ted Hopp    schedule 24.10.2018
comment
Спасибо, Тед, но если компилятор машинописного текста сгенерировал эти (e и t) слева от объекта в консоли, у вас есть идеи, почему свойства всегда не определены, когда есть t, и всегда в порядке, когда есть e. Что оно пытается мне сказать? :-) - person Dac0d3r; 24.10.2018
comment
@ Dac0d3r - я не думаю, что он пытается тебе что-то сказать. Вы, вероятно, можете игнорировать их. Это, вероятно, внутренние бухгалтерские данные, основанные на ваших определениях классов. Возможно, если бы вы показали нам определения классов и не закрашивали большую часть вывода консоли, я мог бы сделать предположение, но сейчас я понятия не имею, почему значения свойств установлены таким образом. Кроме того, свойство e не является неопределенным (иначе рядом с именем была бы одна неопределенная строка, а слева от нее не было бы стрелки раскрытия). - person Ted Hopp; 24.10.2018
comment
Извините, корпоративные данные, но в основном они просто показывают одни и те же ключи/значения :/ Просто наблюдение: если вы внимательно посмотрите на нижнюю строку рисунка, вы увидите: f t(e) для конструкции A и f e(t, n, r, o, ... все отдельные реквизиты) для конструкции B. Все еще не уверен, что это значит, просто наблюдение, так как они могут быть связаны. Я постараюсь посмотреть, могу ли я поделиться еще немного кода - person Dac0d3r; 24.10.2018