微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TS 错误:“null”类型的参数不可分配给“Error |”类型的参数PromiseLike<错误 |未定义> |未定义'.ts(2345)

如何解决TS 错误:“null”类型的参数不可分配给“Error |”类型的参数PromiseLike<错误 |未定义> |未定义'.ts(2345)

我正在使用 Mobx Persist Store 将 MobX 存储保存到本地存储。

文档没有 TS 版本,因此我修改了 2 行(readStore 中的一行,writeStore 中的另一行,您可以将其与 https://github.com/quarrant/mobx-persist-store#with-mobx-6 进行比较)以解决 TS 错误,但是导致另一个错误

import {
    persistence,useClear,usedisposers,isSynchronized,StorageAdapter,} from 'mobx-persist-store'

import { FrameItStore } from '@/store/index'

function readStore(name: string) {
    return new Promise<string>((resolve) => {
        const data = localStorage.getItem(name) || '{}'
        resolve(JSON.parse(data))
    })
}

function writeStore(name: string,content: string) {
    return new Promise<Error | undefined>((resolve) => {
        localStorage.setItem(name,JSON.stringify(content))
        resolve(null)
    })
}

export default persistence({
    name: 'FrameItStore',properties: ['counter'],adapter: new StorageAdapter({
        read: readStore,write: writeStore,}),reactionoptions: {
        // optional
        delay: 2000,},})(new FrameItStore())

我在 null 内的 resolve(null) 中的 writeStore 出现错误

错误如下:

“null”类型的参数不可分配给“Error”类型的参数 | PromiseLike |未定义'.ts(2345)

我该如何解决

解决方法

unknownstringundefined 不兼容。我相信 JSON.parse 正在返回 unknown。因此,您必须确定其类型,而不仅仅是解析 JSON.parse(data)。您可以通过使用条件检查来做到这一点。一旦您确定它是 string,您就可以解析它,否则解析 undefined

function readStore(name: string) {
    return new Promise((resolve) => {
        const data = localStorage.getItem(name) || '{}'
        const output = JSON.parse(data);
        if (typeof output === "string") resolve(output);
        resolve(undefined);
    })
}
,

我想我已经解决了,因为我现在看不到任何错误。我不得不从 JSON.parse 中删除 readStore 并在 resolve(undefined) 中使用 resolve(null) 而不是 writeStore 像:

import {
    persistence,useClear,useDisposers,isSynchronized,StorageAdapter,} from 'mobx-persist-store'

import { FrameItStore } from '@/store/index'

function readStore(name: string) {
    return new Promise<string>((resolve) => {
        const data = localStorage.getItem(name) || '{}'
        resolve(data)
    })
}

function writeStore(name: string,content: string) {
    return new Promise<Error | undefined>((resolve) => {
        localStorage.setItem(name,JSON.stringify(content))
        resolve(undefined)
    })
}

export const PersistState = persistence({
    name: 'FrameItStore',properties: ['counter'],adapter: new StorageAdapter({
        read: readStore,write: writeStore,}),reactionOptions: {
        // optional
        delay: 2000,},})(new FrameItStore())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。