Я хотел бы скрыть член somme в цикле for in
в javascript / typescript с дескриптором
const defaultDescriptor = {
configurable: true,
enumerable: false,
writable: true
}
Более важно, я хотел бы применить этот дескриптор к члену класса, чтобыкаждый экземпляр этого класса наследуется от дескриптора для этого члена.
Я пробовал это:
"use strict";
class Test1 {
test1 = 1;
}
Object.defineProperty(Object.getPrototypeOf(Test1), "test1", defaultDescriptor);
Object.defineProperty(Test1.constructor, "test1", defaultDescriptor);
Object.defineProperty(Test1, "test1", defaultDescriptor);
const t = new Test1();
console.log(Object.keys(t)); // expected [], received [ "test1" ]
детская площадка
Но свойство test1
все еще перечислим.
Я тоже пробовал это
"use strict";
function notEnumerable(target: any, propertyKey: string) {
let descriptor = Object.getOwnPropertyDescriptor(target, propertyKey) || defaultDescriptor;
descriptor.enumerable = false;
Object.defineProperty(target, propertyKey, descriptor)
}
class Test2 {
@notEnumerable
test2 = 2
}
const t = new Test2();
console.log(Object.keys(t)); // expected [], received [ "test2" ]
детская площадка
Эта вторая попытка вдохновлена этим ответом , но ответ для меня неверный (всплывающая ошибка с "use strict"
, потому что по умолчанию для записи указано значение false).
Обратите внимание, что если я заменю defaultDescriptor
на {}
, то член test2
не перечислимо, но также не доступно для записи.
Знаете ли вы способ объявить член доступным для записи и не перечисляемым на уровне класса (в отличие от уровня экземпляра, в этом случае все работаетхорошо)?