Как создать тип для класса в typescript со всеми общедоступными частными методами и свойствами

#typescript

#typescript

Вопрос:

Я хочу создать тип для класса typescript со всеми общедоступными частными свойствами и методами. Для класса

 class C {
    public a: number = 1;
    private x: number = 0;
    private y: number = 0;
    private z: number = 0;
    private m (): {
        // som complex operations
    }
}
  

этот тип

 type CP = {
    [Property in keyof C]: C[Property];
}
  

имеет только свойство a . Итак, я попытался

 type CP = {
    public [Property in keyof C]: C[Property];
}
  

но это определенно неправильно. Есть ли решение?

И да, целью является тестирование, и да, я думаю, что должно быть разрешено тестировать частные методы!

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

1. частные свойства и методы typescript на самом деле не являются частными, поскольку в js нет такого понятия, как «частный». Поэтому, если вы применяете его к any or Object , этого должно быть достаточно, чтобы сделать их общедоступными (конечно, только для целей тестирования). (new C() as any).x . это, очевидно, поставило бы вашу статическую типизацию под угрозу несоответствия, поэтому на нее никогда не следует полагаться в производстве.

2. К сожалению, это невозможно. Любое сопоставление будет основано на keyof запросах типа и ( T[P] ) оба они не разрешают доступ к закрытым полям.

3. Итак, я продолжаю использовать старый <any> трюк.