您可以制作一个函数来检查类型,通过推断值类型并将其与正确的类型进行交互:
https://tsplay.dev/N5x2Pw
function EnsureCorrect<
K extends string,
const R extends Record<K, RecordValue>
>(v: R & {
[K in keyof R]: RecordValue<R[K]['inputSchema'], R[K]['outputSchema']>
}): asserts v is R { }
const d = EnsureCorrect({
register: {
method: f1, // some function
inputSchema: zod.object({ a: zod.string() }),
outputSchema: zod.object({ b: zod.string() })
},
view: {
method: f2, // some function
// ^!
// Type '() => void' is not assignable to type '(() => void) & ((params: { c: string; }) => { d: string; })'.
inputSchema: zod.object({ c: zod.string() }),
outputSchema: zod.object({ d: zod.string() })
}
});
``