Свойство «уровень» не существует для типа » никогда []». ts(2339), но оно регистрируется

#reactjs #typescript #ionic2

Вопрос:

Я не уверен, почему это приводит меня к ошибке, я знаю, что должен что-то сделать, но я не могу понять, что сказать, чтобы это не приводило меня к ошибке. Если я запущу его, он выдаст мне ошибку, но на самом деле он все еще работает, поэтому значение регистрируется в консоли.

 const Tab1: React.FC = () => {
  const [lockdownData, setLockdownData] = useState();
  
  useEffect(() => {
    let finalLockdownData: any;
    var getLockdownData = async () => {
      await firestoreDB.collection("LockdownStatus").doc("lockdownData").get().then((doc) => {
        finalLockdownData = doc.data();
      });
      setLockdownData(finalLockdownData);
    };
    getLockdownData();
  }, []);
  
  console.log('Position 1')
  console.log(lockdownData?.level) //ERROR: Property 'level' does not exist on type 'never[]'.ts(2339)
  console.log('Position 2')

  return (
 

Ответ №1:

Просто напишите это так

 const [lockdownData, setLockdownData] = useState<any[]>([])
 

Правка 1

 if (lockdownData === null) {
    console.log('data is nullable');
} else {
    console.log(lockdownData!.level);
}
 

Изменить 2

 const [lockdownData, setLockdownData] = useState<Record<string, never>>({});
 

Codesandbox: https://codesandbox.io/s/dreamy-water-v0vwb?file=/src/App.tsx:108-184

Комментарии:

1. Это не сработало, однако, [] не должно быть там в любом случае, извините за это

2. По-прежнему выдает ту же ошибку Property 'level' does not exist on type 'any[]'

3. И если я сделаю его пустым в useState (), там будет написано Property 'level' does not exist on type 'never'

4. почему вы хотите установить начальное состояние пустым? вы используете машинописный текст

5. Я не хочу оставлять его пустым, но я жду получения данных из базы данных firestore, а затем, как только данные будут извлечены, я смогу ими манипулировать