我有这样一段代码(为了简洁而简化):
function getText(item: {id: number, value: string}[]) {
return (
<span>
{item.map(({ value }) => <>{value}</>)
.reduce((p, c, i) => [p, <span key={i} className="syntax-operator">, </span>, c])
}
</span>
);
}
TypeScript抱怨reduce()
函数的返回值,说:
Type 'Element[]' is missing the following properties from type 'ReactElement<any, any>': type, props, keyts(2739)
lib.es5.d.ts(1459, 24): The expected type comes from the return type of this signature.
我完全不知道如何修复它。我试着修改类型等,但没有任何效果。一开始我只是忽略了带有注解的行,因为代码在其他方面工作正常。但这是一个库的代码,当我构建它并试图在项目中使用它时,输出是混乱的,所以函数一定是在编译过程中由于不是“正确的”TypeScript而中断的。
输出的外观(编译前的外观)与使用包时的外观(编译后的外观):
有人知道如何“正确地”摆脱错误吗?
1条答案
按热度按时间rur96b6h1#
您不需要为每个文本值提供一个片段:
string
是ReactNode
,因此可以将它们作为裸子对象包含在<span>
中。下面发生的事情是,第一项的
value
被追加到一个数组中,然后每个后续项的value
被追加到span元素中的逗号后面,形成了一个逗号居中的列表。参考:
Array.prototype[@@iterator]()
TSPlayground代码