react native - TS2786 TypeScript gjenkjenner ikke UI-Kitten-komponenter


Feilmelding på IDE:

TS2786: 'ApplicationProvider' kan ikke brukes som en JSX-komponent.
Dens instanstype 'ApplicationProvider' er ikke et gyldig JSX-element.
Typene som returneres av 'render()' er inkompatible mellom disse typene.
Type 'React.ReactNode' kan ikke tildeles type 'import("C:/Users/someuser/node_modules/@types/react/index").ReactNode'.
Type '{}' kan ikke tildeles type 'ReactNode'.
Type '{}' kan ikke tildeles type 'ReactPortal'.

Ikke bare ApplicationProvider, men hver komponent som jeg importerte fra UI-kitten/components har feilen «ikke et gyldig JSX-element».

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * Generated with the UI Kitten TypeScript template
 * https://github.com/akveo/react-native-ui-kitten
 *
 * Documentation: https://akveo.github.io/react-native-ui-kitten/docs
 *
 * @format
 */

import React from 'react';
import {
  ImageProps,
  StyleSheet,
} from 'react-native';
import {
  ApplicationProvider,
  Button,
  Icon,
  IconRegistry,
  Layout,
  Text,
} from '@ui-kitten/components';
import { EvaIconsPack } from '@ui-kitten/eva-icons';
import * as eva from '@eva-design/eva';

/**
 * Use any valid `name` property from eva icons (e.g `github`, or `heart-outline`)
 * https://akveo.github.io/eva-icons
 */
const HeartIcon = (props?: Partial<ImageProps>): React.ReactElement<ImageProps> => (
  <Icon {...props} name='heart'/>
);

export default (): React.ReactFragment => (
  <>
    <IconRegistry icons={EvaIconsPack}/>
    <ApplicationProvider {...eva} theme={eva.light}>
      <Layout style={styles.container}>
        <Text style={styles.text} category='h1'>
          Welcome to UI Kitten 😻
        </Text>
        <Text style={styles.text} category='s1'>
          Start with editing App.js to configure your App
        </Text>
        <Text style={styles.text} appearance='hint'>
          For example, try changing theme to Dark by using eva.dark
        </Text>
        <Button style={styles.likeButton} accessoryLeft={HeartIcon}>
          LIKE
        </Button>
      </Layout>
    </ApplicationProvider>
  </>
);

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  text: {
    textAlign: 'center',
  },
  likeButton: {
    marginVertical: 16,
  },
});

Reprodusere:

npx react-native init MyApp --template @ui-kitten/template-ts

Det ser ut som at oppdatering av @types/react til den nyeste versjonen (18.0.6) vil løse problemet. Men da støtter ikke EXPO versjon 18. Det ser også ut til at problemet først har oppstått nylig.

Svar #1

Løsning her.

  1. Legg til "resolutions": { "@types/react": "~17.0.21" }, i package.json
  2. Slett node_modules
  3. Installer på nytt med yarn install eller tilsvarende

Relaterte artikler