Как добавить условие в тип по определению класса в TypeScript
Как мне в типе RecursivePartial добавить условие, что если T[P] является любым классом, а не просто объектом, либо массивом таких классов, то не оборачивать в RecursivePartial, а вернуть T[P]. Причем перечислить классы "extends A" не вариант, я не могу знать какие могут быть классы в передаваемом типе. Спасибо
type RecursivePartial<T> = {
[P in keyof T]?:
T[P] extends (infer U)[] ? RecursivePartial<U>[] :
T[P] extends object ? RecursivePartial<T[P]> :
T[P]
}
class A {
id: number;
constructor(data: { id: number }) {
this.id = data.id;
}
};
type B = {
id: number;
obj: {
value1: string;
value2: string;
};
item: A;
items: A[];
}
type C = RecursivePartial<B>
Я хотел бы при присваивании const c: C = {}; c.item = { id: 1 }; видеть ошибку, что c.item должен быть классом A