1***@tmp.dcloud.io
1***@tmp.dcloud.io
  • 发布:2026-03-28 15:26
  • 更新:49 分钟前
  • 阅读:23

uniapp x 里面使用pinia定义的方法,没有类型提示,在uvue里面使用的时候,可以传任何的类型,没有报错

分类:uni-app x
import { defineStore } from "pinia";  
import { ref } from "vue";  

// 定义会员信息类型  
type MemberProfile {  
    name: string;  
    avatar?: string | null;  
    id?: number | null;  
}  

// 定义store  
export const useMemberStore = defineStore("member", () => {  
    // 会员信息  
    const profile = ref<MemberProfile | null>(null);  

    // 保存会员信息,登录时使用  
    const setProfile = (val: MemberProfile) => {  
        profile.value = val;  
    };  

    // 清理会员信息, 退出时使用  
    const clearProfile = () => {  
        profile.value = null;  
    };  

    // 获取会员名称  
    const getMemberName = (): string => {  
        return profile.value?.name || "";  
    };  

    // 判断是否已登录  
    const isLoggedIn = (): boolean => {  
        return !!profile.value;  
    };  

    return {  
        profile,  
        setProfile,  
        clearProfile,  
        getMemberName,  
        isLoggedIn  
    };  
}, {  
    // 持久化  
    persist: {  
        // 使用uni-app的存储API,确保多端兼容  
        storage: {  
            setItem: (key : string, value : string) => {  
                uni.setStorageSync(key, value);  
            },  
            getItem: (key : string) => {  
                return uni.getStorageSync(key);  
            },  
            removeItem: (key : string) => {  
                uni.removeStorageSync(key);  
            }  
        }  
    }  
});  

上面定义的stores是类型限制的

<template>  
    <view class="my">  
        <view>会员信息:{{ memberStore.getMemberName() }}</view>  
        <button @tap="memberStore.setProfile({nickname:'王'})" size="mini" plain type="primary">保存用户信息</button>  
        <button @tap="memberStore.clearProfile()" size="mini" plain type="warn">清理用户信息</button>  
    </view>  
</template>  

<script setup lang="uts">  
    import { useMemberStore } from "../../stores/modules/member.uts"  

    const memberStore = useMemberStore()  
</script>

uvue里面的setProfile提示是any,可以传入任何的参数,也能正常运行,这个不检查类型的吗?但在uniapp里面使用ts就有提示

2026-03-28 15:26 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

抱歉,我在知识库中没有找到关于 uni-app x 中使用 Pinia 时方法参数类型提示失效 的具体说明或解决方案。

根据知识库中关于 uts 类型系统 的内容,可以确认以下信息:

  1. uts 是强类型语言:在 uni-app x 中,uvue 文件使用 uts(而非 ts),变量、方法、参数、返回值都必须有类型定义。data 中的数据需要通过字面量自动推导或 as 关键字声明类型。参考文档

  2. any 类型的处理:uts 中的 any 类型在编译到不同平台时有不同的表现。4.18 版本起,uts 在编译到 js 时,any 类型会包含 null 类型;编译为 kotlin 或 swift 时 any 类型也包含 null参考文档

关于您提到的 Pinia store 方法在 uvue 中使用时参数类型变为 any 的问题,知识库中暂无相关的 issue 记录或官方说明。建议:

  • 确认 store 文件中类型定义是否正确导出
  • 检查 uvue 文件中导入 store 时是否有类型声明
  • 如问题持续存在,建议到 DCloud issue 系统 提交反馈,附上最小复现项目

知识库中暂未找到该问题的具体修复方案或配置方法。

内容为 AI 生成,仅供参考
DCloud_heavensoft

DCloud_heavensoft

你这个是编译到哪个平台?

现在Android肯定是不支持pinia的

要回复问题请先登录注册