我有两个对象:
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;
但这并不理想。