Typescript 不在 forwardRef 中解析 JSX
Typescript not parsing JSX inside forwardRef
我在 Typescript 中使用 React 和 Next.js,我正在尝试制作这个包装器组件,它将一个 Next.js <Link />
组件和一个 <a />
标签:
import React, { forwardRef } from 'react';
import Link, { LinkProps } from 'next/link';
type EnhancedLinkProps = {
children: React.ReactNode[];
} & LinkProps;
const EnhancedLink = forwardRef<HTMLAnchorElement, EnhancedLinkProps>(({
as,
passHref,
prefetch,
replace,
shallow,
scroll,
href,
children,
...rest
}, ref) => (
<Link
href={href}
as={as}
passHref={passHref}
prefetch={prefetch}
replace={replace}
shallow={shallow}
scroll={scroll}
href={href}
>
<a {...rest} ref={ref}>
{children}
</a>
</Link>
))
export default EnhancedLink;
问题是我想支持转发引用,但是一旦我将我的函数包装在 forwardRef 中,打字稿就无法解析我的 JSX。我在 <Link...
:
行收到此错误消息
"'Link' refers to a value, but is being used as a type here. Did you mean 'typeof Link'?ts(2749)"
似乎正在将 Link 周围的 <>
注册为 Typescript 语法。
我使用这个例子将我的 forwardRef 设置为 typescript 代码:
type Props = { children: React.ReactNode; type: "submit" | "button" };
export type Ref = HTMLButtonElement;
export const FancyButton = React.forwardRef<Ref, Props>((props, ref) => (
<button ref={ref} className="MyClassName" type={props.type}>
{props.children}
</button>
));
摘自 here。我假设这个例子应该很好,但是当我将它直接复制粘贴到我的代码中时,我也在 JSX 开始的行上得到一个错误(即 <button>...
):
"Cannot find name 'button'.ts(2304)"
Button 只是一个很好的旧 HTML 元素,所以它绝对不会在这里选择 JSX。
我尝试用显式 return 语句重写箭头函数。来自:
() => (<button />)
收件人:
() => { return (<button />) }
也没用,同样的错误。
我在这里错过了什么?
我遗漏了一些非常明显的东西:)
文件名必须从 .ts
重命名为 .tsx
。
我在 Typescript 中使用 React 和 Next.js,我正在尝试制作这个包装器组件,它将一个 Next.js <Link />
组件和一个 <a />
标签:
import React, { forwardRef } from 'react';
import Link, { LinkProps } from 'next/link';
type EnhancedLinkProps = {
children: React.ReactNode[];
} & LinkProps;
const EnhancedLink = forwardRef<HTMLAnchorElement, EnhancedLinkProps>(({
as,
passHref,
prefetch,
replace,
shallow,
scroll,
href,
children,
...rest
}, ref) => (
<Link
href={href}
as={as}
passHref={passHref}
prefetch={prefetch}
replace={replace}
shallow={shallow}
scroll={scroll}
href={href}
>
<a {...rest} ref={ref}>
{children}
</a>
</Link>
))
export default EnhancedLink;
问题是我想支持转发引用,但是一旦我将我的函数包装在 forwardRef 中,打字稿就无法解析我的 JSX。我在 <Link...
:
"'Link' refers to a value, but is being used as a type here. Did you mean 'typeof Link'?ts(2749)"
似乎正在将 Link 周围的 <>
注册为 Typescript 语法。
我使用这个例子将我的 forwardRef 设置为 typescript 代码:
type Props = { children: React.ReactNode; type: "submit" | "button" };
export type Ref = HTMLButtonElement;
export const FancyButton = React.forwardRef<Ref, Props>((props, ref) => (
<button ref={ref} className="MyClassName" type={props.type}>
{props.children}
</button>
));
摘自 here。我假设这个例子应该很好,但是当我将它直接复制粘贴到我的代码中时,我也在 JSX 开始的行上得到一个错误(即 <button>...
):
"Cannot find name 'button'.ts(2304)"
Button 只是一个很好的旧 HTML 元素,所以它绝对不会在这里选择 JSX。
我尝试用显式 return 语句重写箭头函数。来自:
() => (<button />)
收件人:
() => { return (<button />) }
也没用,同样的错误。
我在这里错过了什么?
我遗漏了一些非常明显的东西:)
文件名必须从 .ts
重命名为 .tsx
。