创建了ref数组,为何使用的时候
//创建用于装ref的数组:
const ctlChildRefs = useRef<SubContainerImperativeRef[]>([]); // 多个子组件用数组装
...
//但是使用时候报错
ctlChildRefs[index]
报错信息:
元素隐式具有 "any" 类型,因为类型为 "number" 的表达式不能用于索引类型 "MutableRefObject<SubContainerImperativeRef[]>"。
在类型 "MutableRefObject<SubContainerImperativeRef[]>" 上找不到具有类型为 "number" 的参数的索引签名。ts(7053)
需要如下方式使用:
if(ctlChildRefs && ctlChildRefs.current) {
ctlChildRefs.current[index].doSomething()
}
在你的情况中,错误的原因是因为你错误地理解了useRef
的使用方式。当你使用useRef<SubContainerImperativeRef[]>([])
时,你实际上是在创建一个MutableRefObject<SubContainerImperativeRef[]>
,这意味着ctlChildRefs.current
是一个SubContainerImperativeRef[]
数组,而不是ctlChildRefs
本身。
因此,当你尝试通过索引访问ctlChildRefs[index]
时,TypeScript 编译器会报错,因为它认为ctlChildRefs
是一个MutableRefObject<SubContainerImperativeRef[]>
,而不是一个数组,而MutableRefObject
类型没有定义接受数字索引的索引签名。
正确的访问方式应该是通过ctlChildRefs.current[index]
来访问数组中的元素。ctlChildRefs.current
是实际的数组,你可以使用索引来访问其元素。
修改后的代码应该如下:
// 创建用于装ref的数组:
const ctlChildRefs = useRef<SubContainerImperativeRef[]>([]); // 多个子组件用数组装
// 使用时
const someElement = ctlChildRefs.current[index]; // 正确访问方式
这样,你就可以正确地访问到ctlChildRefs
数组中的元素了。如果index
在数组的有效范围内,这段代码就不会有问题。如果index
可能超出数组范围,你可能还需要添加一些检查来避免运行时错误。
第二行提示 怎么解决这种提示问题,[]操作符既支持number,又支持string,要怎么设置?
问题内容: 为React项目尝试TypeScript时,我陷入了这个错误: 当我尝试过滤组件中的数组时出现 到目前为止,我看了文章“ TypeScript中的索引对象”(https://dev.to/kingdaro/indexing-objects-in- typescript-1cgi ),因为它存在类似的错误,但是我尝试将索引签名添加到类型,我仍然收到相同的错误。 我的组件代码: 问题答案:
如果我以通常的方式声明一个类,我可以使用类名作为类型: 但是,如果我通过将类表达式分配给变量来声明一个类,我就不能将该名称用作类型: 建议使用不起作用,因为我想要的实例类型,而不是类本身的类型。 typescript操场示例 如何获取以第二种方式定义的类的实例类型? 我对以这种方式定义类感兴趣的原因是,我希望有一个接口来描述某些类将具有的静态方法,如此处的手册中所述(该部分中的第三个示例)。 下面
我正在尝试使用nifi将CSV记录插入Postgres数据库。 示例csv文件: 当nifi场景运行时,它会给出以下错误 错误列“timenow”的类型为timestamp,没有时区,但表达式的类型为character variating 如果我使用正常的 没有错误值插入到表中。我必须更改nifi配置才能将其添加到表中吗? 我换了Nifi CSVReader- 编辑:在第一条注释之后,Nifi生成
我需要从这个xsd: 下面是我尝试的XML: 我得到了这个错误: 无效。错误-第10,9行:org.xml.sax.SAXParseException;行号:10;列号:9;cvc-complex-type.2.3:元素“group”不能具有字符[children],因为该类型的内容类型仅为元素。
在Spring Boot的一个项目中,Java8使用hibernate-spatial和PostgresDB 9.4 应用程序属性 (我也尝试了PostgisPG9Dialect) 我的实体有一个属性 如果我用空值保存就可以了,但是如果我放一个值 我有: 在我的数据库中,我可以看到列定义为 我要疯了...为什么它不起作用? 更新(仍然不起作用,我正在收集新信息) 1)我认为问题可能是数据库的创建。