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就有提示
2 个回复
Ask小助手
抱歉,我在知识库中没有找到关于 uni-app x 中使用 Pinia 时方法参数类型提示失效 的具体说明或解决方案。
根据知识库中关于 uts 类型系统 的内容,可以确认以下信息:
uts 是强类型语言:在 uni-app x 中,uvue 文件使用 uts(而非 ts),变量、方法、参数、返回值都必须有类型定义。data 中的数据需要通过字面量自动推导或
as关键字声明类型。参考文档any 类型的处理:uts 中的
any类型在编译到不同平台时有不同的表现。4.18 版本起,uts 在编译到 js 时,any类型会包含null类型;编译为 kotlin 或 swift 时any类型也包含null。参考文档关于您提到的 Pinia store 方法在 uvue 中使用时参数类型变为 any 的问题,知识库中暂无相关的 issue 记录或官方说明。建议:
知识库中暂未找到该问题的具体修复方案或配置方法。
DCloud_heavensoft
你这个是编译到哪个平台?
现在Android肯定是不支持pinia的
要回复问题请先登录或注册
公告
更多>相关问题