使用像这样的文字对象类型:
type A<R = any> = {
f1: () => R
f2: (x: R) => void
}
当我声明这样的值时,我希望将
x
的 fn2
参数推断为 string
(当然不指定 A<string>
):
const a: A = {
f1: () => "",
f2: (x) => {} // x: any, not string
}
有没有办法从
x
的返回类型推断 f1
的类型?
我不完全确定是否可以执行此类型检查。可能是,但我不知道如何实现。
由于无论如何您都可能会使用解决方法,因此您可以尝试以下更简单的方法:
const construct = <R>(f1: () => R, f2: (x: R) => void) => ({
f1,
f2,
});
const result = construct(
() => 'string',
(x) => {}
// ^ x: string
);