定义对象键但推断值

时间:2021-01-15 19:07:53

标签: typescript

我有两个对象:

const paths = {
  login: '/login',
  admin: '/admin/:userId'
}

const pathBuilder = {
  login: () => '/login',
  admin: (userId: string) => `/admin/${userId}`,
}

现在我想输入 pathBuilder 对象,使其具有与对象 paths 相同的键,但告诉 TypeScript 从中推断值的类型。

我曾尝试使用 Record<keyof typeof paths, any>{ [key in keyof typeof paths]: any },但最终得到的对象是键入的键和设置为 any 的值。

我发现它起作用的唯一方法是像这样进行额外的对象转换:

const paths = {
  login: '/login',
  admin: '/admin/:userId'
}
type Paths = typeof paths;

const pathBuilder = {
  login: () => '/login',
  admin: (userId: string) => `/admin/${userId}`,
}
type Builder = typeof pathBuilder;

// now this typedPathBuilder object will have keys from paths and values from pathBuilder
const typedPathBuilder: {
  [Key in keyof Definitions]: Builder[Key];
} = pathBuilder;

但这并不理想。

0 个答案:

没有答案