react – Manipulando retorno de função Async/Await com JSON.parse – REACTJS


O problema está acontecendo porque o tipo do seu ret.value é uma união entre string e null.

Mesmo que no seu teste ele seja uma string, a declaração desse tipo contempla a possibilidade dele ser null também, e o tipo null não é uma parâmetro válido para o método JSON.parse, portanto o compilador não está aceitando o mesmo.

Para passar o parâmetro para o método JSON.parse, você pode utilizar um dos muitos shields do TypeScript. Se você adicionar um if para se certificar que ret.value é do tipo string dentro de determinado escopo, isso já será o suficiente para o compilador se certificar que ele é válido:

async getObject() {
    const ret = await Storage.get({ key: 'user' });
    if (typeof ret.value === 'string') {
        // dentro desse escopo você pode utilizar ret.value como se ele sempre fosse uma string
        console.log(JSON.parse(ret.value));
    }
}

Outra abordagem que você pode utilizar é criar uma variável que é do tipo string, e exclusivamente string:

async getObject() {
    const ret = await Storage.get({ key: 'user' });
    const value = ret.value ?? '';
    console.log(JSON.parse(value));
}

No exemplo acima, se ret.value for null o operador coalesce (??) irá resultar na string vazia, portanto o tipo de value não tem como ser null, logo é um parâmetro válido para JSON.parse