#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
orObject
, этого должно быть достаточно, чтобы сделать их общедоступными (конечно, только для целей тестирования).(new C() as any).x
. это, очевидно, поставило бы вашу статическую типизацию под угрозу несоответствия, поэтому на нее никогда не следует полагаться в производстве.2. К сожалению, это невозможно. Любое сопоставление будет основано на
keyof
запросах типа и (T[P]
) оба они не разрешают доступ к закрытым полям.3. Итак, я продолжаю использовать старый
<any>
трюк.