Является ли самоопределение в методе статического класса плохой практикой?
Нет, совсем нет.Вполне нормально использовать статический метод в качестве фабрики.
Странная вещь в вашем коде заключается в том, что вы инициализируете data
асинхронно.Это может быть нарочно, но с моей точки зрения класс довольно бесполезен без данных, поэтому я бы предложил сделать это заранее, внутри статического метода:
class KYC {
constructor(
public reference,
public data,
) {}
static async getFromReference(reference) {
const result = await reference.get();
if (!result.exist) throw new Error('not found');
return result.data;
}
static async getById(id: string) {
const reference = firestoreAdmin.collection('kyc').doc(id);
return new this(reference, await this.getFromReference(reference));
}
… // further methods operating on this.data
}