1***@qq.com
1***@qq.com
  • 发布:2022-10-26 22:53
  • 更新:2022-11-14 21:57
  • 阅读:803

uniapp vue3+ts 中这些报错都是啥呀,有大神吗,百度都找不到答案

分类:uni-app
2022-10-26 22:53 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

你这个问题,下个有道翻译,就能解决了。
说的很明白,算术运算左侧必须是 "any"、"number"、"bigint" 或枚举类型

呆狗的一生

呆狗的一生 - 呆狗的一生

你应该转成 number类型再进行运算;例如:

times.value = (  new Date().getTime() - new Date(times).getTime()  ) /  1000
呆狗的一生

呆狗的一生 - 呆狗的一生

例如:在 js 中 let str = 1 + "1" 是ok的,是可以运行的。但在 ts 中则会提示错误,其实也是能编译成功的。

  • 1***@qq.com (作者)

    好的,谢谢!第三章图能帮我看下什么问题吗?大哥,都是数字类型,怎么也报错了

    2022-10-27 00:01

  • 呆狗的一生

    回复 1***@qq.com: 第3张图,parseInt函数,期望接收一个 string 类型的参数,返回一个number值。但你给了一个 number 类型的参数

    改成 parseInt( (times.value / 86400).toString() )

    2022-10-27 00:10

  • 呆狗的一生

    你也可以简写成 times.value = + (times.value / 86400)

    2022-10-27 00:14

  • 1***@qq.com (作者)

    回复 呆狗的一生: 大哥,你好牛啊,我看了半天没看懂,第四张图呢,我用async 怎么也报错,应该不是类型错误了吧,这些问题我查了好久

    2022-10-27 00:17

  • 呆狗的一生

    回复 1***@qq.com: 这个问题当做一个作业,留给你,自己思考

    2022-10-27 00:20

  • 1***@qq.com (作者)

    回复 呆狗的一生: 好的好的,谢谢大哥今晚的帮助!

    2022-10-27 00:23

  • 1***@qq.com (作者)

    回复 1***@qq.com: 大哥,绝望了,解决不了

    2022-10-27 20:05

1***@qq.com

1***@qq.com (作者)

再帮一次小弟

呆狗的一生

呆狗的一生 - 呆狗的一生

你用了 setup 了吗?这种方式我没有用过,你这个页面方便发我看看吗

  • 1***@qq.com (作者)

    我用了setup vue3.0的语法

    2022-10-27 22:28

  • 1***@qq.com (作者)

    回复 1***@qq.com: export default {

    components: {

    popups,

    },

    setup() {

    const store = useStore();

    const myInfo = ref<any>({});

    const isLove = ref<boolean>(store.state.isLove);

    const isShow = ref<boolean>(false);

    const isLogin = ref<boolean>(store.state.isLogin);

    const userTwoData = ref<any>({});

    const times = ref<number>(0);

    //时间计算

    const isShowSetTime = ref<boolean>(false); //时间切换显示

    const usersImages = ref<string[]>([]); //两个头像图片

    const setTimeValue = ref<string>(""); //打开时间选择器对应的时间节点


    // watch(isLogin, async (newQuestion, oldQuestion) => {  
    // if (oldQuestion) {
    // isShow.value = false
    // }
    // })
    const onClickToXQday = async (e: any) => {
    uni.navigateTo({
    url: `../playCard/playCard`,
    });
    // isShow.value = true
    };
    //子组件登入返回触发的逻辑
    const handleEven = () => {
    ///``````
    let userInfo = uni.getStorageSync("userInfo");
    console.log(222, userInfo);
    myInfo.value = userInfo;
    uni.hideLoading();
    isLogin.value = true;
    isShow.value = false;
    };
    const handleToAtlas = () => {
    uni.navigateTo({
    url: `../atlasImg/atlasImg`,
    });
    };
    //进入页面之前的处理逻辑
    const handleIsLogin = async () => {
    ///``````
    let userInfo = uni.getStorageSync("userInfo");
    if (userInfo) {
    //已登入
    store.state.isLogin = true;
    handleIsLoveBind(); //判断是否绑定
    myInfo.value = userInfo;
    isLogin.value = true;
    } else {
    //未登入,但数据库里有,获取第一次登入
    await getUerOpenidToken();
    if (store.state.isLogin == true) {
    let userInfo = uni.getStorageSync("userInfo");
    myInfo.value = userInfo;
    handleIsLoveBind(); //
    isLogin.value = true;
    } else {
    isShow.value = true;
    }
    }
    };
    //时间选择 点击确定触发
    const changeTime = async (e: any) => {
    let { data } = await setUserTogetherTime(e);
    handleTimesData(data);
    };
    //时间转换,加减日期,得出在一起的时间
    const handleTimesData = (startTime: String) => {
    //起始时间
    let timess: any = startTime.replace(new RegExp("-", "gm"), "/"); //转换格式 -- //
    times.value = (new Date().getTime() - new Date(timess).getTime()) / 1000;
    times.value = Number(parseInt((times.value / 86400).toString()));
    console.log(111222, typeof times.value);
    times.value >= 0 ? times.value : (times.value = 0);
    isShowSetTime.value = true;
    };
    //判断当前登入的用户是否有绑定用户
    const handleIsLoveBind = async () => {
    ///``````
    const { data } = await isLoveBind();
    if (data.type === 1) {
    userTwoData.value = data.twoUserData;
    store.state.twoUserData = data.twoUserData; //恋人数据存入 状态管理
    store.state.loveKey = data.twoUserData[0].love_key; //恋人key 状态管理
    isLove.value = true;
    if (data.date != null) {
    handleTimesData(data.date);
    }
    }
    };
    // #ifndef H5 || APP-PLUS
    onShareAppMessage(async () => {
    const userInfo = uni.getStorageSync("userInfo");
    const openid = uni.getStorageSync("openid");
    const code = getRandomCode(12);
    const codeData = {
    code, //生成12位邀请码
    createTime: new Date(),
    };
    await addInviteCode(code, "add");
    return {
    title: "我们的私有空间",
    path: `/pages/loginReceived/loginReceived?openId=${openid}&nickname=${userInfo.user_name}&avatarUrl=${userInfo.avatar_url}&code=${code}`,
    imageUrl:
    "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202002%2F10%2F20200210120355_snutr.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1665846069&t=247f575138e711bf4835f630329a8af3", //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
    };
    });
    // #endif
    onShow(async () => {
    console.log(store.state.isLove);
    });
    onLoad(async () => {
    await handleIsLogin();
    });

    return {
    isLove,
    myInfo,
    isLogin,
    userTwoData,
    times,
    onClickToXQday,
    isShow,
    handleEven,
    handleToAtlas,
    usersImages,
    changeTime,
    isShowSetTime,
    setTimeValue,
    };

    },

    2022-10-27 22:32

呆狗的一生

呆狗的一生 - 呆狗的一生

我是用的这样的

export default {  
  onShareAppMessage(res) {  
    if (res.from === 'button') {// 来自页面内分享按钮  
      console.log(res.target)  
    }  
    return {  
      title: '自定义分享标题',  
      path: '/pages/test/test?id=123'  
    }  
  }  
}  
  • 1***@qq.com (作者)

    截图发不了,只能发文字

    2022-10-27 22:29

  • 1***@qq.com (作者)

    其他地方用了async 都可以的,就是这里不知道怎么出错了,是返回的数据类型要定义吗?

    2022-10-27 22:30

呆狗的一生

呆狗的一生 - 呆狗的一生

我也没有用过setup来写uniapp。刚才我看了下,uniapp内置的声明文件,截取了下面的三处声明。一起学习:

declare interface CustomShareAppMessage {  
    title?: string;  
    path?: string;  
    imageUrl?: string;  
}  
declare type onShareAppMessageHook = (options: ShareAppMessageOption) => CustomShareAppMessage | void;  
export declare const onShareAppMessage: (hook: onShareAppMessageHook, target?: ComponentInternalInstance | null) => any;

得出结论,传递给onShareAppMessage的回调函数,应该返回一个CustomShareAppMessage类型的对象,而你返回的是一个Promise(备注,所有async函数都是返回一个promise,这点不赘述),所以不应该加 async(并弃用await),而你在返回结果之前要进行异步操作,所以我也不知道怎么办,才是最佳方案。经我分析了良久,得出一个结论:uniapp的内置声明文件写错了。应该改为如下

declare type onShareAppMessageHook = (options: ShareAppMessageOption) => Promise<CustomShareAppMessage >  | CustomShareAppMessage | void;

改了之后,就不会报错了。

呆狗的一生

呆狗的一生 - 呆狗的一生

呆狗的一生

呆狗的一生 - 呆狗的一生

HBuilder 3.6.9,修改了关于onShareAppMessage的声明文件,https://ask.dcloud.net.cn/question/156262,用async函数不会报错了。

  • 1***@qq.com (作者)

    好的,谢了大哥

    2022-11-15 14:42

该问题目前已经被锁定, 无法添加新回复