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

TypeScript异步函数返回类型声明报错求助:User类型不符合要求

问题分析与修复方案

核心错误点

  1. 异步函数返回类型声明错误:async函数的返回值会自动被包装为Promise,因此不能直接将返回类型声明为User,必须用Promise<User>包裹。
  2. 返回值类型不统一:当value === null时返回的空字符串''属于string类型,和声明的User对象类型完全不兼容,会触发类型检查报错。

修复后的代码

类型定义(保持原定义不变)

export type User = {
    email: string,
    id: string,
    name: string,
    userKey: string,
    userRole: string,
    photo: string,
}

修复后的异步函数

export const getCurrentUserData = async (): Promise<User | null> => {
    const value = await storage.getItem('currentSite');
    if (value === null) {
        // 无数据时返回null,与类型声明匹配
        return null;
    } else {
        try {
            const getuserData = JSON.parse(value);
            // 确保数据结构符合预期,避免运行时属性缺失错误
            if (getuserData?.userData) {
                const userData = {
                    email: getuserData.userData.email,
                    id: getuserData.userData.id,
                    name: getuserData.userData.name,
                    userKey: getuserData.userData.userKey,
                    userRole: getuserData.userData.userRole,
                    photo: getuserData.userData.photo,
                }
                return userData;
            }
            // 数据结构不符合预期时返回null(可根据业务需求改为抛出错误)
            return null;
        } catch (err) {
            // 处理JSON解析失败的异常
            console.error('用户数据解析失败:', err);
            return null;
        }
    }
}

关键说明

  • 异步函数的返回类型必须使用Promise<T>格式,其中T是实际返回的数据类型。这里因为存在无数据场景,所以用Promise<User | null>表示可能返回User对象或null。
  • 移除了返回空字符串的逻辑,改为返回null,确保返回值类型与声明完全一致。
  • 添加try/catch捕获JSON解析异常,同时增加getuserData?.userData的存在性检查,避免运行时出现属性不存在的报错。

内容的提问来源于stack exchange,提问作者Tanmoy Sarker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:32:40