向“值”添加类型时出现意外标记

问题描述

 const count= data.reduce((s:any,{(value:any)}) => s + value,0);

我正在尝试向“value”添加一个新类型,它显示未检测到的标记,我是新来的类型脚本,请帮忙

解决方法

有几个问题:

  1. () 部分周围不应有任何 value: any
  2. 您不能像那样提供内联解构参数的类型,因为它与解构语法的重命名功能相冲突。 {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 −−−−−−−−−−−−−−−^^^^^^^^^^^^^^

Playground link


通常,any 类型注释不是最佳实践。您还没有展示 data 是什么,但在大多数情况下,您根本不必在回调的参数上放置类型注释。例如,让我们假设 data{value: number;}[] — 具有 value 属性的对象数组,该属性是一个数字。鉴于 data 的类型,TypeScript 根本不需要对 reduce 调用进行任何类型注释:

const count = data.reduce((s,{value}) => s + value,0);

TypeScript 从末尾的 0data 的定义知道 svalue 都是数字,结果也是数字。


在评论中,您询问了如何使用 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 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−−−−−^^^^^^^^
    // ....
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...