如何在typescript tsx文件中将泛型类型传递给匿名函数

xpszyzbs  于 2022-12-05  发布在  TypeScript
关注(0)|答案(2)|浏览(343)

以下函数在.tsx文件中失败:

export const withComponent = <T>(Component: React.ComponentType<T>) => (props: any) => (
  <shortcutContext.Consumer>
    {addShortcut => <Component addShortcut={addShortcut} {...props} />}
  </shortcutContext.Consumer>
);

带错误JSX element 'T' has no corresponding closing tag.

z0qdvdin

z0qdvdin1#

看起来像是.tsx解析器的一个限制,没有办法让它将这个特定的<解释为泛型参数的分隔符,而不是开始标记。
但对于这种特殊情况,解决方法很简单。
export const意味着这是在顶层,并且它的实现并不引用this,因此可以使用旧式函数而不是第一个=>来重写它:

export const withComponent = function<T>(Component: React.ComponentType<T>) { 
    return (props: any) => (
        <shortcutContext.Consumer>
            {addShortcut => <Component addShortcut={addShortcut} {...props} />}
        </shortcutContext.Consumer>
    )
};
n7taea2i

n7taea2i2#

您也可以这样写:

export const withComponent = <T,>(Component: React.ComponentType<T>) => (props: any) => (
  <shortcutContext.Consumer>
    {addShortcut => <Component addShortcut={addShortcut} {...props} />}
  </shortcutContext.Consumer>
);

相关问题