用模块扩展删除先前的声明



我想超载react-navigationnavigate功能以具有更好的类型检查。

navigate(
  routeNameOrOptions: string,
  params?: NavigationParams,
  action?: NavigationAction,
): boolean

我这样定义了我的超负荷:

type Routes = 'Dashboard' | 'Profile'
declare module 'react-navigation' {
  export interface NavigationScreenProp<S, P = NavigationParams> {
    navigate(
      routeNameOrOptions: Routes,
      params?: NavigationParams,
      action?: NavigationAction,
    ): boolean
  }
}

它有效,但string类型仍然可用,因此navigate('Invalid')不是类型错误。

如何"删除"以前的声明只有我的?

您仍然会得到其他过载,因为打字稿确实声明了所有环境模块声明。我真的不知道从另一个定义的模块增强中减去特定模块类型成员(此处的功能过载(的任何方法。

老实说,最简单的选择是将外部类型的NavigationScreenProp包裹为路由器层左右的自定义类型。

type Routes = 'Dashboard' | 'Profile'
type Router = {
  navigate(
      routeNameOrOptions: Routes,
      params?: NavigationParams,
      action?: NavigationAction,
  ): boolean
}

type Routes = 'Dashboard' | 'Profile'仅适用于您的应用程序。模块增强/环境模块声明更适合提供/修复丢失/错误或太宽类型的软件包(然后最好将所有者加以解决(。

更新

用TSCONFIG paths删除了我的建议,因为它在样本中对我来说并不顺利。另外,我认为,上述解决方案是最适合您的用例维护和最容易的方法。希望,它会有所帮助。

最新更新