如何解决向“值”添加类型时出现意外标记
const count= data.reduce((s:any,{(value:any)}) => s + value,0);
我正在尝试向“value”添加一个新类型,它显示未检测到的标记,我是新来的类型脚本,请帮忙
解决方法
有几个问题:
- 在
()
部分周围不应有任何value: any
。 - 您不能像那样提供内联解构参数的类型,因为它与解构语法的重命名功能相冲突。
{value: any}
表示“获取value
的值并将其放入名为any
的变量/参数中。
要为解构模式指定类型,您需要将模式作为一个整体进行输入:
// The destructured parameter −−−−−−vvvvv
const count = data.reduce((s: any,{value}: {value: any}) => s + value,0);
// The type for the object −−−−−−−−−−−−−−−^^^^^^^^^^^^^^
通常,any
类型注释不是最佳实践。您还没有展示 data
是什么,但在大多数情况下,您根本不必在回调的参数上放置类型注释。例如,让我们假设 data
是 {value: number;}[]
— 具有 value
属性的对象数组,该属性是一个数字。鉴于 data
的类型,TypeScript 根本不需要对 reduce
调用进行任何类型注释:
const count = data.reduce((s,{value}) => s + value,0);
TypeScript 从末尾的 0
和 data
的定义知道 s
和 value
都是数字,结果也是数字。
在评论中,您询问了如何使用 forEach
执行此操作,您还需要索引。同样,您可能不需要指定类型,当然也不需要指定 index
的类型,因为 TypeScript 知道它在 forEach
回调中的类型。但是如果你这样做了,因为 index
没有被解构,你只需指定它的类型内联:
// If TypeScript knwos the type of `this.data`,you DON'T NEED THESE TYPES
this.data.forEach(({value,text,data}: {value: typeOfValue; text: typeOfText; data: typeOfData},index: number) => {
// Types −−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−−−−−^^^^^^^^
// ....
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。