Sé que puedo usar la combinación de declaraciones para agregar una nueva definición a métodos integrados como este:
interface ObjectConstructor { keys<T>(o: T & (T extends any[] ? never : object): string[]; } Quiero que esta definición de Object.keys no permita matrices. Sin embargo, esto agrega una nueva definición sobrecargada a Object.keys , no elimina las definiciones existentes. Si llamo a Object.keys({}) , usa mi nueva definición. Si llamo a Object.keys([]) , omite mi definición y usa la definición integrada.
¿Hay alguna manera de eliminar las definiciones antiguas de Object.keys ?
Editar: para este problema en particular, me di cuenta de que solo podía hacer keys(o: any[]): never . Sin embargo, será útil conocer una solución general.