TypeScript - 根据类型对象在函数 sig 中映射键类型和值类型
TypeScript - Map key type with value type in function sig based on a type object
想象一下有这样一个类型映射:
type MyTypeMapping = {
Key1: Type1;
Key2: Type2;
};
和这样的函数:
const getVal = (key: keyof MyTypeMapping) => {
return getObjectFromStorage(key)
}
函数 getVal
的预期 return 类型需要遵循提供的键值。因此,如果 key === Key1
,则预期的 return 类型必须是 Type1
.
对于一个密切相关的问题,想象一下是否有一个函数:
const setVal = (key: keyof MyTypeMapping, val: T) => {
return setObjectInStorage(key, val)
}
如何使参数类型 val
依赖于参数类型 key
?因此,如果 key === Key2
,val
的预期类型必须是 Type2
。
您可以为此使用推断的泛型。
const getVal = <K extends keyof MyTypeMapping>(key: K): MyTypeMapping[K] => {
return getObjectFromStorage(key) as MyTypeMapping[K];
};
const setVal = <K extends keyof MyTypeMapping>(key: K, val: MyTypeMapping[K]) => {
return setObjectInStorage(key);
};
想象一下有这样一个类型映射:
type MyTypeMapping = {
Key1: Type1;
Key2: Type2;
};
和这样的函数:
const getVal = (key: keyof MyTypeMapping) => {
return getObjectFromStorage(key)
}
函数 getVal
的预期 return 类型需要遵循提供的键值。因此,如果 key === Key1
,则预期的 return 类型必须是 Type1
.
对于一个密切相关的问题,想象一下是否有一个函数:
const setVal = (key: keyof MyTypeMapping, val: T) => {
return setObjectInStorage(key, val)
}
如何使参数类型 val
依赖于参数类型 key
?因此,如果 key === Key2
,val
的预期类型必须是 Type2
。
您可以为此使用推断的泛型。
const getVal = <K extends keyof MyTypeMapping>(key: K): MyTypeMapping[K] => {
return getObjectFromStorage(key) as MyTypeMapping[K];
};
const setVal = <K extends keyof MyTypeMapping>(key: K, val: MyTypeMapping[K]) => {
return setObjectInStorage(key);
};