是否可以在TypeScript中映射对象值类型?

Rog*_*ach 5 typescript

例如,我有以下形式的功能:

function wrap<T>(item: T): W<T> {
}
interface W<T> {
  item: T;
}
Run Code Online (Sandbox Code Playgroud)

是否可以编写函数(mapValues),通过应用此wrap函数并返回正确键入的对象来转换给定的对象值?我理解如何编写实际的函数(lodash的_.mapValues工作正常),但我不知道是否可以应用正确的类型.

是否可以编写mapValues函数以便编译以下内容?

interface Before {
  a: number;
  b: string;
}

interface After {
  a: W<number>;
  b: W<string>;
}

let obj1: Before = { a: 1, b: "2" };
let obj2: After = mapValues(obj1);

function typecheck_number(arg: number) {}
function typecheck_string(arg: string) {}
typecheck_number(obj2.a.item);
typecheck_string(obj2.b.item);
Run Code Online (Sandbox Code Playgroud)

Sha*_*ard 0

是的,你在OP中的类型是正确的。mapValues只需要标记即可返回 的类型After

这是一个TS 游乐场,它展示了如果mapValues要返回After.

映射对象的属性的类型为Wrap<T>