提交作业(疑惑)
来源:4-6 作业练习 - 用 Hook + TS + TS泛型实现useArray

weixin_慕丝2377090
2022-05-03
import React, { useState } from "react";
const useArray = <T>(params: T[]) => {
const [useArraystate, setuseArraystate] = useState(params)
const value = useArraystate
const clear = setuseArraystate([])
const removeIndex = (index: number): void => setuseArraystate([...useArraystate].splice(index, 1))
const add = (item: T) => setuseArraystate([...useArraystate, item])
// const add = (item: T) => setuseArraystate(useArraystate.push(item))
// 报错: 类型“number”的参数不能赋给类型“SetStateAction<T[]>”的参数
return {value, clear, removeIndex, add}
}
为什么:
const add = (item: T) => setuseArraystate(useArraystate.push(item))
// 报错: 类型“number”的参数不能赋给类型“SetStateAction<T[]>”的参数
会报这个错误啊,我对item:T,限定类型了啊,且parmas:T[]是一个数组,不应该不能使用push才对。
写回答
2回答
-
因为 push 函数返回的是新数组的长度,类型自然会报错。
这段代码最终 set 的是 push 函数的返回值。应该用你第一个 add 函数
const add = (item: T) => setuseArraystate(useArraystate.push(item))
012022-07-18 -
Nolan
2022-05-05
仔细对比一下作业答案吧
00