因此,我有一个基本的可迭代组件Link
,它呈现了一些链接。他被包裹在Links
组件中,该组件对其进行迭代。不幸的是,我遇到的问题是Typescript
在key
组件迭代中不了解如何使用Link component
上的Links
道具。
我会为您提供帮助!
错误消息:
输入'{键:数字; }”不能分配给“ ILink”类型。
类型'{key:number;类型中缺少属性'title'; }'。
我的代码:
import React from 'react'
import styles from './index.cssmodule.scss'
interface ILinks {
links: object[]
}
interface ILink {
title: string
label: string
href: string
icon: string
}
// Link Component
const Link: React.SFC<ILink> = ({ title, label, href, icon }) => (
<a href={href + label}>
<i className={icon} />
<span>{title}</span>
</a>
)
// Links Component that wraps Link
const Links: React.SFC<ILinks> = ({ links = [] }) => {
const bulidLinksList = (): JSX.Element[] => (
links.map((link, i) => (
<Link key={i} {...link} /> // ERROR Type '{ key: number; }' is not assignable to type ILink
))
)
return (
<div className={styles.linksContainer}>
{bulidLinksList()}
</div>
)
}
export default Links
答案 0 :(得分:1)
您正在这样定义接口Link
:
interface ILink {
title: string
label: string
href: string
icon: string
}
然后,您尝试分配key={i}
,最终它只是像这样的对象
{
key: 123;
}
您尚未在key
界面中定义ILink
。这就是TypeScript抱怨的原因。
答案 1 :(得分:1)
尝试使用React.ReactElement
代替React.SFC
,ReactElement
将为您提供key
和ref
道具
const Link: React.ReactElement<ILink> = ({ title, label, href, icon }) => (
<a href={href + label}>
<i className={icon} />
<span>{title}</span>
</a>
)
// Links Component that wraps Link
const Links: React.ReactElement<ILinks> = ({ links = [] }) => {
const bulidLinksList = (): JSX.Element[] => (
links.map((link, i) => (
<Link key={i} {...link} />
))
)
return (
<div className={styles.linksContainer}>
{bulidLinksList()}
</div>
)
}
答案 2 :(得分:0)
这里的基本问题是在线上您不使用ReactElement,而是使用函数功能接口React.SFC来生成ReactElement。该功能期望您这样定义的接口 接口ILink { 标题:字符串 标签:字符串 href:字符串 图标:字符串 }