typescript - Eliminar declaración previa con aumento de módulo
Quiero sobrecargar la función navigate de react-navigation para tener una mejor verificación de tipos.
navigate(
routeNameOrOptions: string,
params?: NavigationParams,
action?: NavigationAction,
): boolean
Definí mi sobrecarga de esta manera:
type Routes = 'Dashboard' | 'Profile'
declare module 'react-navigation' {
export interface NavigationScreenProp<S, P = NavigationParams> {
navigate(
routeNameOrOptions: Routes,
params?: NavigationParams,
action?: NavigationAction,
): boolean
}
}
Funciona, pero el tipo string todavía está disponible, por lo que navigate('Invalid') no es un error de tipo.
¿Cómo puedo "eliminar" la declaración anterior para tener solo la mía?
Respuesta #1
Todavía obtienes las otras sobrecargas, porque TypeScript realiza la fusión de declaraciones de todas tus declaraciones de módulos ambientales. Realmente no conozco ninguna manera de restar miembros específicos de tipo de módulo (aquí la sobrecarga de función) de otra ampliación de módulo definida.
Honestamente, la opción más fácil sería envolver el tipo externo NavigationScreenProp como un tipo personalizado específico en tu capa de enrutador o algo así.
type Routes = 'Dashboard' | 'Profile'
type Router = {
navigate(
routeNameOrOptions: Routes,
params?: NavigationParams,
action?: NavigationAction,
): boolean
}
type Routes='Dashboard' | 'Profile' es una restricción específica del dominio solo para tu aplicación. Las ampliaciones de módulos/declaraciones de módulos ambientales son más adecuadas para proporcionar/corregir tipos faltantes/erróneos o demasiado generales de un paquete (y entonces sería mejor concatenar al propietario para una corrección).
Actualización:
Eliminé mi propuesta con tsconfig paths, ya que no funcionó bien para mí en un ejemplo. Además, creo que la solución anterior es la mejor para mantener y la más fácil para tu caso de uso. Espero que sea de ayuda.
