TypeScript中React Context的User状态类型声明写法是否正确?
问题解答
你的写法不正确,IUser | any这种定义完全废掉了TypeScript的类型检查能力,any会让TypeScript忽略所有类型约束,相当于没做类型定义,这违背了用TypeScript的初衷。
直接把initialState的user设为null报错,是因为原来的类型约束不允许null值。正确的做法是明确把user的类型定义为IUser | null,这样既支持登录时的完整用户对象,也支持未登录时的null状态,同时保留完整的类型检查:
首先修正你的IState接口:
export interface IState { user: IUser | null; }
然后初始化状态就可以合法地设为null了:
const initialState: IState = { user: null };
这样做的好处很明显:
- 未登录时你可以安全地将user设为null,不会触发类型错误
- 登录后访问user的属性(比如
user.username)时,TypeScript会提供完整的类型提示 - 当你尝试在user为null的情况下访问其属性时,TypeScript会提前报错,帮你避免运行时的空指针问题
记住,除非万不得已,不要用any类型——它会让TypeScript的类型优势荡然无存。
内容的提问来源于stack exchange,提问作者עמית שוקרון
相关产品推荐
相关产品推荐

