#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. Проблема в том, что я создаю пакет, я не знаю, какой класс я принимаю.