You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已使用接口定义时,useState是否需重复定义类型?

回答

不需要重复指定类型。

TypeScript的类型推断机制会自动根据函数的返回类型约束推导状态的类型:因为你已经明确useAppState必须返回IAppStateProps类型的值,所以返回的notesData必须匹配IAppStateProps中定义的INoteProps[]类型。当你写useState([])时,TypeScript会结合这个返回约束,自动推断出notesData的类型为INoteProps[],因此<INoteProps[]>这个泛型参数可以完全省略。

唯一需要注意的例外场景:如果状态的初始值是null、undefined这类无法直接推断出具体类型的值,可能还是需要显式指定类型,但这里初始值是明确的空数组,结合返回类型的约束,推断过程完全可靠。

省略后的代码会更简洁:

import {INoteProps} from "./interfaces/INoteProps";
import {IAppStateProps} from "./interfaces/IAppStateProps";
export const useAppState = (): IAppStateProps => {
  const [notesData, setNotesData] = useState([]);
  ...more code
  return {
    notesData
  }
};

当然,如果你认为显式标注类型能让代码可读性更高,方便其他开发者快速理解状态类型,保留泛型参数也完全没问题——这本质上是团队代码风格的选择,而非语法强制要求。


内容的提问来源于stack exchange,提问作者one-hand-octopus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:01:20