Javascript 引用类型本身,类型脚本
我试图根据输入的值(屏幕名称)将类型(屏幕参数类型)传递给字段 这是导航道具Javascript 引用类型本身,类型脚本,javascript,typescript,react-native,types,react-navigation,Javascript,Typescript,React Native,Types,React Navigation,我试图根据输入的值(屏幕名称)将类型(屏幕参数类型)传递给字段 这是导航道具 export interface IEditProfileStackNavigatorProps<RouteName extends keyof EditProfileRoutes> { navigation: StackNavigationProp<EditProfileRoutes, RouteName>; route: RouteProp<EditProfileRoutes,
export interface IEditProfileStackNavigatorProps<RouteName extends keyof EditProfileRoutes> {
navigation: StackNavigationProp<EditProfileRoutes, RouteName>;
route: RouteProp<EditProfileRoutes, RouteName>;
}
因此,如果插入到screenToNavigateTo
中的屏幕是username
,那么参数类型将是{token:string}
,其余的则是未定义的
我的方法是
export type EditProfileRoutes = {
Options: undefined;
Name: undefined;
Username: { token: string };
Bio: undefined;
Location: undefined;
VerifyUser: {
screenToNavigateTo: keyof Omit<EditProfileRoutes, 'VerifyUser'> | keyof ManageAccountRoutes;
params?:EditProfileRoutes['VerifyUser']['screenToNavigateTo'];
};
};
导出类型EditProfileRoutes={
选项:未定义;
名称:未定义;
用户名:{token:string};
生物:未定义;
位置:未定义;
验证用户:{
screenToNavigateTo:keyof Omit | keyof ManageAccountRoutes;
参数?:EditProfileRoutes['VerifyUser']['screenToNavigateTo'];
};
};
但这似乎不起作用您希望VerifyUser
的两个字段相互匹配,因此我们需要的是所有有效配对的并集
这将获取对象路由
并将其映射到具有相同键的新对象,但这些值是具有属性screenToNavigateTo
和params
的对象screenToNavigateTo
是Routes
中的键,params
是值
type RouteParams<Routes> = {
[K in keyof Routes]: {
screenToNavigateTo: K,
params: Routes[K];
}
}
我们从RouteParams
获得的已解析的并集如下所示:
{
screenToNavigateTo: "Options";
params: undefined;
} | {
screenToNavigateTo: "Name";
params: undefined;
} | {
screenToNavigateTo: "Username";
params: {
token: string;
};
} | { ...
使用此类型,我们现在可以将EditProfileRoutes
定义为:
export type EditProfileRoutes = {
Options: undefined;
Name: undefined;
Username: { token: string };
Bio: undefined;
Location: undefined;
VerifyUser: RouteParams<Omit<EditProfileRoutes, 'VerifyUser'>> | RouteParams<ManageAccountRoutes>
};
导出类型EditProfileRoutes={
选项:未定义;
名称:未定义;
用户名:{token:string};
生物:未定义;
位置:未定义;
验证用户:路由图|路由图
};
您希望VerifyUser
的两个字段相互匹配,因此我们需要的是所有有效配对的并集
这将获取对象路由
并将其映射到具有相同键的新对象,但这些值是具有属性screenToNavigateTo
和params
的对象screenToNavigateTo
是Routes
中的键,params
是值
type RouteParams<Routes> = {
[K in keyof Routes]: {
screenToNavigateTo: K,
params: Routes[K];
}
}
我们从RouteParams
获得的已解析的并集如下所示:
{
screenToNavigateTo: "Options";
params: undefined;
} | {
screenToNavigateTo: "Name";
params: undefined;
} | {
screenToNavigateTo: "Username";
params: {
token: string;
};
} | { ...
使用此类型,我们现在可以将EditProfileRoutes
定义为:
export type EditProfileRoutes = {
Options: undefined;
Name: undefined;
Username: { token: string };
Bio: undefined;
Location: undefined;
VerifyUser: RouteParams<Omit<EditProfileRoutes, 'VerifyUser'>> | RouteParams<ManageAccountRoutes>
};
导出类型EditProfileRoutes={
选项:未定义;
名称:未定义;
用户名:{token:string};
生物:未定义;
位置:未定义;
验证用户:路由图|路由图
};