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 === Key2val 的预期类型必须是 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);
};