Способ получения списка всех закрытых элементов в Typescript?

#typescript #types #private #private-members

#typescript #типы #Частное #private-члены

Вопрос:

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

Я пробовал это во время тестирования, но я был обеспокоен тем, что я собираюсь получить всех членов и не смогу определить, является ли член закрытым во время выполнения. Кроме того, я не был уверен, как сделать то же самое со статическими членами.

 type Constructor<T> = new () => T;

export default function <T> (classX: Constructor<T>) {
    var c = new classX()
    var made = Object.getOwnPropertyNames(c);

    for (var i of made) { console.log(i) }
}
 

Комментарии:

1. «… не было возможности определить, является ли член закрытым во время выполнения …» Никакие закрытые члены не являются частными во время выполнения с версией private в TypeScript. Все они общедоступны. TypeScript private относится исключительно к системе типов, а не к среде выполнения. (Не отвечаю , потому что это не отвечает на вопрос о том, как получить список закрытых членов для целей тестирования, если вы вообще можете.)

2. (В отличие от этого, собственный private в JavaScript, входящий в предложение class fields , которое вскоре станет этапом 4, действительно является частным.)

Ответ №1:

Может быть, просто добавьте в свои методы private_ и получите закрытые элементы, потому что во время выполнения все это просто свойства объекта, в js нет отражений. Это может быть достигнуто с помощью reflect-metadata в typescript, но все же вам нужно указать массив закрытых методов. или просто создайте ____privateMembers____ static свойство, которое отслеживает эти метаданные (обычно это делается в динамически типизированных языках, таких как js и python)

Комментарии:

1. Проблема в том, что я создаю пакет, я не знаю, какой класс я принимаю.