【发布时间】:2021-10-15 04:48:31
【问题描述】:
我目前正在将 Next.js 项目从 JavaScript 迁移到 TypeScript,但遇到了错误:Property 'className' does not exist on type '{ props: ReactNode; }'。在 Javascript 中,我可以从道具中提取类名,但打字稿找不到类型。代码如下:
import { useRouter } from 'next/router'
import Link from 'next/link'
import { ReactNode } from 'react'
export { NavLink }
NavLink.defaultProps = {
exact: false,
}
interface NavLinkProps {
href: string
exact?: boolean
children: ReactNode
props: ReactNode
}
function NavLink({ href, exact, children, ...props }: NavLinkProps) {
const { pathname } = useRouter()
const isActive = exact ? pathname === href : pathname.startsWith(href)
if (isActive) {
props.className += ' active'
}
return (
<Link href={href}>
<a {...props}>{children}</a>
</Link>
)
}
}
【问题讨论】:
-
只需将
className?: string添加到您的 NavLinkProps 接口并处理未定义的 className 情况。 -
这对修改你拥有的道具来说是一个糟糕的模式。
-
@RomanKurbatov 更好的模式是什么?
-
试试
classnames包,它将简化处理多个类。您可以使用{...props} {className: {classnames(props.className, { active: isActive }}之类的东西来覆盖原始类名并具有多个条件。 -
谢谢!这行得通。
标签: javascript reactjs typescript next.js rest-parameters