我想重载react-navigation
的{{3}}函数以进行更好的类型检查。
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')
不是类型错误。
如何才能“删除”以前的声明,只保留我的声明?
答案 0 :(得分:0)
您仍然会遇到其他重载,因为TypeScript对所有环境模块声明执行了declaration merging。我真的不知道从另一种定义的模块扩充中减去特定模块类型成员(此处为函数重载)的方法。
老实说,最简单的选择是将外部类型NavigationScreenProp
包装为路由器层左右的特定自定义类型。
type Routes = 'Dashboard' | 'Profile'
type Router = {
navigate(
routeNameOrOptions: Routes,
params?: NavigationParams,
action?: NavigationAction,
): boolean
}
type Routes = 'Dashboard' | 'Profile'
是仅针对您的应用的特定于域的限制。模块增强/环境模块声明更适合于提供/修复缺少的/错误的或过于广泛的软件包类型(然后最好向所有者要求修复)。
更新:
使用tsconfig paths
删除了我的建议,因为它在示例中对我来说效果不佳。我也认为,以上解决方案对于您的用例而言,是最佳的维护方式,也是最简单的。希望有帮助。