如何让TS在通用构建器函数中推断回调?

考虑以下用例演示 ( playground ):

// A builder that can self-reference its keys using a ref function
declare function makeObj<K extends string>(
    builder: (ref: (k: K) => number) => Record<K, number>
): Record<K, number>;

// Not using `ref` for now. All good, K is inferred as <"x" | "y">.
const obj1 = makeObj(() => ({ x: 1, y: 2 }));

// Oops, now that we try to use `ref`, K is inferred as <string>.
const obj2 = makeObj(ref => ({ x: 1, y: ref("invalid key, only x or y") }));

// This works, but we'd want K to be automatically inferred.
const obj3 = makeObj<"x" | "y">(ref => ({ x: 1, y: ref("x") }));

所以,我应该怎么写makeObj,以便K自动推断?

以上是如何让TS在通用构建器函数中推断回调?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>