Существует открытый вопрос о том, чтобы сделать тип конструктора более определенным (https://github.com/Microsoft/TypeScript/issues/3841), но ему 4 года, и, похоже, он никуда не денется.
В качестве временного решения я мы только начали добавлять { _noMyProjectProxy: true }
ко всем моим классам и перечислять все, к чему у меня нет доступа. Выглядит это так:
type NonClassObject<TYPE> =
TYPE extends HTMLElement ? never :
TYPE extends Event ? never :
TYPE extends OtherClass ? never :
TYPE extends { _noMyProjectProxy: any } ? never :
TYPE;
export function createObjectProxy<TYPE extends object>(obj: NonClassObject<TYPE>) {
return new Proxy(obj, {});
}
Это не красиво и не элегантно, но работает, когда больше ничего не было.