TypeScript过滤字符串数组报ts(2345)错,如何修改代码?
问题解决:TypeScript useState更新函数类型错误
错误原因
代码存在两个关键问题引发TS报错:
useState<string[] | []>的类型定义冗余,[]本身就是string[]的子类型,这种联合类型会让TypeScript错误推断setAddMore的参数类型,认为它只能接受string[],而非函数式更新。- 参数
value: String使用了大写构造函数类型,应改为小写的基本类型string。
修改后的代码
const [addMore, setAddMore] = useState<string[]>(["1"]); const removeAdd = (value: string) => { setAddMore((prev: string[]) => { return prev.filter((valueAt: string) => valueAt !== value); }); };
关键修改点
- 移除
useState类型中的| [],直接使用string[],TS会自动处理空数组或非空数组场景。 - 将
value: String改为value: string,遵循TypeScript基本类型使用规范。 - 删除不必要的
as string[]类型断言,filter返回的数组类型本身就是string[],无需额外断言。
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

