我在Typescript中使用compose函数有点问题,我总是收到错误。 .d.ts中的类型定义也很混乱。例如:
type Props = { t: number };
const foo = (props: {}) => <div {...props} />;
const moo = (props: Props) => <div {...props} />;
const bar = (props: Props) => <div {...props} />;
const Dar = compose(foo, moo)(bar);
const Test = () => <Dar />;
有几个问题。它抱怨说&#34; bar&#34;没有&#34; foo&#34;参数(它实际上有)。
另外,我不能使用,因为Dar被评估为JSX.Element而不是无状态函数。任何IDEA都有可能的例子,如何在Typescript中使用compose?
感谢。
答案 0 :(得分:1)
TypeScript的推断从左到右起作用,通用的compose
函数从右到左组成函数,并且可能导致错误的类型。
您可以使用从左到右组成的合成功能,例如flow。
答案 1 :(得分:0)
compose
是一个组合两个函数的函数,假设第一个函数的输出类型与第二个函数的输入类型匹配。
const compose = (f,g) => x => f(g(x))
所以你在撰写的文字中说的是你想要bar
(这是Props
到JSX.Element
的函数)作为{{1}的参数这也是从moo
到Props
的函数,然后获取结果并将其应用于JSX.Element
。
问题是
foo
不接受moo
到Props
的功能,它接受JSX.Element
如果你想要返回一个“无状态函数”,你需要使用这个模板来告诉Typescript你想要的是什么
Props