Propiedades fantasmas extrañas que se envían al método Proxy get

Este es el código que está causando el error:

console.log(objectWithProxyProperty); 

El error con el que estoy lidiando es cualquiera,

 TypeError: Cannot read property 'apply' of undefined 

o

 Error: The assertion library used does not have a 'inspect' property or method. 

Dependiendo de qué cheques use, lo que se demuestra en el siguiente código. Lo que está claro es que la propiedad ‘inspeccionar’ se está enviando al método de obtención, pero ‘inspeccionar’ no es un Símbolo Y ‘inspeccionar’ tampoco se puede leer con prop in chaiAssert .

objectWithProxyProperty se ve como:

  const objectWithProxyProperty = {}; const assrt = <Partial> function () { try { return chaiAssert.apply(chaiAssert, arguments); } catch (e) { return handleError(e); } }; // the assert property on objectWithProxyProperty is a Proxy objectWithProxyProperty.assert = new Proxy(assrt, { get: function (target, prop) { if (typeof prop === 'symbol') { return Reflect.get(...arguments); } if (!(prop in chaiAssert)) { return handleError( // new Error(`The assertion library used does not have property or method.`) new Error(`The assertion library used does not have a '${prop}' property or method.`) ); } return function () { try { return chaiAssert[prop].apply(chaiAssert, arguments); } catch (e) { return handleError(e); } } } }); 

Lo que parece estar sucediendo es que cuando registro este objeto con una propiedad de proxy llamada “assert”, el propio proxy recibe propiedades extrañas en el método de obtención.

Específicamente estas propiedades se denominan ‘inspeccionar’ y ‘constructor’, no parecen ser símbolos.

Entonces, lo que tengo que “resolver el problema” es agregar un cheque así:

  const objectWithProxyProperty = {}; const assrt = <Partial> function () { try { return chaiAssert.apply(chaiAssert, arguments); } catch (e) { return handleError(e); } }; let badProps = { inspect: true, constructor: true }; objectWithProxyProperty.assert = new Proxy(assrt, { get: function (target, prop) { if (typeof prop === 'symbol') { return Reflect.get(...arguments); } if (badProps[String(prop)]) { // ! added this ! return Reflect.get(...arguments); } if (!(prop in chaiAssert)) { return handleError( // new Error(`The assertion library used does not have property or method.`) new Error(`The assertion library used does not have a '${prop}' property or method.`) ); } return function () { try { return chaiAssert[prop].apply(chaiAssert, arguments); } catch (e) { return handleError(e); } } } }); 

¿Cuáles son estas propiedades que no existen en chaiAssert pero no son símbolos?

Hasta ahora, estas propiedades fantasmas han sido ‘inspeccionar’ y ‘constructor’, pero la razón por la que hago la pregunta es porque necesito saber qué otros pueden haber, ¡para poder manejarlos antes de tiempo!