已使用接口定义时,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
相关产品推荐
相关产品推荐

