我想创建一个带有两个参数的函数.一个字符串,它是确定第二个参数类型的关键,该参数类型是一个对象.字符串和对象之间的关联在单独的类型中键入.我希望在调用函数时(我已经做到了这一点)以及在函数中使用IF或Switch语句来实现完全的自动补全和类型安全!对象的类型应由字符串参数派生.
以下是一个简化的示例:
export type TLoginParameters = {
username: string;
otherrequiredparam: string;
optionalparam: number;
}
export type TLogoutParameters = {
detailsForLogginOut: string;
}
export type TStateMap = {
login: TLoginParameters;
logout: TLogoutParameters;
};
const edit = <K extends keyof TStateMap , T extends TStateMap[K]>(type: K, entry:T ) => {
switch(type) {
case "login": {
// i expected autocomplete for TLoginParameters- but it doesnt work :(
const prop = entry.username;
break;
}
}
}
// autocomplete works here
const result = edit("login", {username: "test123", otherrequiredparam: "test", optionalparam: 123 });
我try 了该函数的另一种类型定义
<O extends TConfigTypeMap, K extends keyof O, V extends O[K]>( type: K, entry:V ) =>
但结果是一样的.