uni-app 从存储中读取数据一致报类型不匹配

发布于 1周前 作者 nodeper 来自 uni-app

uni-app 从存储中读取数据一致报类型不匹配

问题描述

uiapp x从存储中读取数据一致报类型不匹配,报错信息是: error: 类型不匹配: 推断类型是Any?(可为空的Any),但预期的是String。‌

代码如下:

const cacheStr = uni.getStorageSync('userinfos');  
if(typeof cacheStr == "string"){  
    const cacheInfo = JSON.parse(cacheStr);  
}

报错的行是“const cacheInfo = JSON.parse(cacheStr);”这一行。


2 回复

存的数据是什么,读取的数据是什么?


在uni-app中遇到从存储中读取数据时类型不匹配的问题,通常是因为在存储和读取数据时使用的数据类型不一致导致的。为了确保数据类型的一致性,我们需要确保在存储数据时明确数据类型,并在读取数据时正确处理。以下是一个简单的代码示例,展示了如何在uni-app中正确地存储和读取数据,避免类型不匹配的问题。

存储数据

首先,我们使用uni.setStorageSync方法存储数据。这里我们存储一个对象,确保对象中的数据类型明确。

// 存储一个对象,包含字符串和数字类型
const dataToStore = {
    name: '张三',
    age: 30
};

try {
    uni.setStorageSync('userData', dataToStore);
    console.log('数据已存储');
} catch (e) {
    console.error('存储数据失败', e);
}

读取数据

然后,我们使用uni.getStorageSync方法读取数据。为了确保类型匹配,我们在读取数据后,可以显式地将其转换为预期的类型,或者使用类型断言(TypeScript中)。

// 读取存储的数据
try {
    const storedData = uni.getStorageSync('userData');
    
    if (storedData && typeof storedData === 'object' && 'name' in storedData && 'age' in storedData) {
        // 确保读取到的数据是对象,并且包含预期的字段
        const { name, age } = storedData;
        
        // 确保name是字符串,age是数字
        if (typeof name === 'string' && typeof age === 'number') {
            console.log('读取到的数据:', { name, age });
        } else {
            console.error('类型不匹配');
        }
    } else {
        console.error('数据格式不正确');
    }
} catch (e) {
    console.error('读取数据失败', e);
}

注意事项

  1. 数据校验:在读取数据时,始终进行数据校验,确保数据的类型和结构符合预期。
  2. 错误处理:使用try...catch块来捕获存储和读取数据时可能发生的异常。
  3. TypeScript:如果项目使用TypeScript,可以利用类型系统来确保数据的类型安全。

通过上述方法,我们可以有效地避免在uni-app中从存储中读取数据时遇到类型不匹配的问题。确保在存储和读取数据时,数据类型的一致性是关键。如果数据类型可能变化,考虑在存储数据时添加类型标识,或者在读取数据时进行更复杂的类型检查和转换。

回到顶部