Ошибка Typescript Тип элемента JSX ‘View’ не является функцией-конструктором для элементов JSX

#javascript #reactjs #typescript #react-native #expo

#javascript #reactjs #typescript #реагировать-родной #выставка

Вопрос:

Сама программа работает нормально, но Typescript подчеркивает множество элементов красным цветом в моей функции возврата для моих компонентов. В частности, все, что выходит из моего react-native импорта.

Что-нибудь вроде View , Button , и тому подобное выдает эти «ошибки». Я говорю об ошибках в кавычках, потому что приложение работает вообще без каких-либо проблем. Typescript в моей IDE (VS Code) — единственное, на что жалуются. Он выдает эти ошибки, если я выбираю (через нижний правый переключатель строки состояния) JavaScript React или TypeScript React. Вот пример:

Проблема с текстом

Вот важные фрагменты моего package.json

 "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  "dependencies": {
    "@react-navigation/native": "^5.7.6",
    "@react-navigation/stack": "^5.9.3",
    "expo": "~39.0.2",
    "expo-status-bar": "~1.0.2",
    "react": "16.13.1",
    "react-dom": "16.13.1",
    "react-native": "https://github.com/expo/react-native/archive/sdk-39.0.3.tar.gz",
    "react-native-screens": "~2.10.1",
    "react-native-web": "~0.13.12",
    "react-native-gesture-handler": "~1.7.0",
    "react-native-reanimated": "~1.13.0",
    "react-native-safe-area-context": "3.1.4",
    "@react-native-community/masked-view": "0.1.10"
  },
  "devDependencies": {
    "react-native-web": "~0.13.7",
    "@types/react": "*",
    "@types/react-dom": "*",
    "@types/react-native": "*",
    "typescript": "~3.9.5"
  },
  

И вот как выглядит файл, который выдает эти ошибки:

 import { StatusBar } from "expo-status-bar";
import React, { useState } from "react";
import { StyleSheet, Text, View, TextInput, Button } from "react-native";

const SummaryScreen = ({ navigation }) => {
    const accountDetailsPage = () => {
        navigation.navigate("Account Details");
    };

    const contactDetailsPage = () => {
        navigation.navigate("Contact Details");
    };

    return (
        <View style={styles.container}>
            <Text>HERE IS A BUNCH OF TEXT</Text>
            <Button title="Account Details" onPress={accountDetailsPage} />
            <Button title="Contact Details" onPress={contactDetailsPage} />
        </View>
    );
};

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: "#fff",
        flexDirection: "column",
        alignItems: "center",
        justifyContent: "center",
    },
});

export default SummaryScreen;
  

Я думаю, важно отметить, что я НЕ получаю эти ошибки для компонентов, созданных из @react-navigation таких, как <Navigator> и <Stack.Screen ...

Вот и мой tsconfig:

 {
    "compilerOptions": {
        "allowSyntheticDefaultImports": true,
        "jsx": "react-native",
        "lib": ["dom", "esnext"],
        "moduleResolution": "node",
        "noEmit": true,
        "skipLibCheck": true,
        "resolveJsonModule": true,
        "strict": true
    }
}
  

Что-то в VS Code жалуется, что не может найти модуль useState , но он также отлично работает при запуске без ошибок

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

1. Глупый вопрос, но вы установили все зависимости (включая зависимости разработчиков) или только зависимости prod?

2. Я также отмечаю, что у вас есть react-native-web как зависимости, так и devDependencies; есть ли причина для этого?

3. К сожалению, невозможно воспроизвести только то, что вы опубликовали.

4. Я установил все новое, и я нашел ответ. По какой-то причине VS Code использовал очень старую версию Typescript и не использовал версию Typescript, которую я установил в своем tsconfig. Простое исправление, но его трудно диагностировать и определить.

Ответ №1:

Проблема заключалась в том, что VS Code использовал неправильную и очень старую версию TypeScript. Я не уверен, как это было установлено таким образом, или как у него все еще была версия, которая была выпущена после полного выпуска. Простое исправление, но практически невозможно диагностировать. Вот где я это исправил:

введите описание изображения здесь

Как вы можете видеть, у меня была установлена версия 2.7.2 на самом VS Code, и она БЫЛА выбрана. Теперь я использую 3.9.7, и все эти ошибки исчезли.