我想超载react-navigation
的navigate
功能以具有更好的类型检查。
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
删除了我的建议,因为它在样本中对我来说并不顺利。另外,我认为,上述解决方案是最适合您的用例维护和最容易的方法。希望,它会有所帮助。