Утверждение, что универсальный тип имеет необязательное свойство, довольно просто.Просто определите интерфейс, который имеет свойство, и скажите, что тип расширяет этот интерфейс.Это будет выглядеть примерно так:
interface Identifiable {
id: number;
}
export abstract class BaseRepository<T extends Identifiable> extends Repository<T> {
async main (changes: DeepPartial<T>) {
const p = this.create();
Object.assign(p, changes);
if (p && p.id) {
await this.update(p.id, p);
}
const v = await this.save(p);
return this.findOneOrFail({ where: v })
}
}