перехватчики реакции и машинописный текст - свойство '***' не существует для типа 'never'

Я сталкивался с этим с разных сторон, и в настоящее время мой код выглядит так, и я получаю следующую ошибку:

Свойство "альбомы" не существует с типом "никогда".

Я использую перехватчики React, но получаю сообщение об ошибке от объекта data, обновленного с помощью useState. data имеет свойство albums, которое я не знаю, как определить или где это сделать.

import React, { useState } from 'react';

interface ArtistProps {
   artistName: string,
}


const Artist: React.SFC< ArtistProps > = ({ artistName }) => {

    const [data, setData] = useState(null);

    return (
        <>
            <p>{artistName)}</p> // this is fine
            <p>{data.albums}</p> // error here
        </>
    );
}

person peter flanagan    schedule 03.12.2018    source источник
comment
Могу я спросить, где вы нашли эту useState функцию? Это что-то новое или что-то настолько старое, о существовании чего я просто скучал?   -  person kind user    schedule 03.12.2018
comment
@kinduser это от реагирующих хуков. Вы пропустили шумиху.   -  person Nurbol Alpysbayev    schedule 03.12.2018


Ответы (1)


Попробуй это:

const [data, setData] = useState<null | {albums: any}>(null);

Затем используйте переменную data, например

data!.albums 

! означает, что машинописный текст знает, что вы уверены, что значение не null. Но еще лучше явно проверить значение для null, например. data ? data.albums : 'no data'

P.S. Вместо {albums: any} добавьте соответствующий интерфейс.

person Nurbol Alpysbayev    schedule 03.12.2018
comment
спасибо @Nurbol, я определенно не эксперт TS :-) Какое решение вы бы предложили? - person peter flanagan; 03.12.2018