reactjs - Merkelig TS2322 (Type kan ikke tildeles) Feil


Jeg har et superenkelt kodeeksempel her, men uansett hvilken editor jeg bruker (Webstorm, VSCode) får jeg røde understrekinger under SearchBarens "onChangeText"-egenskap med følgende melding:

TS2322: Type '(val: string) => void' is not assignable to type '((text: string) => void) & ((text: string) => void) & (() => any) & (() => any) & (() => any) & ((text: string) => void) & (() => any) & (() => any) & (() => any)'.   Type '(val: string) => void' is not assignable to type '() => any'.

Koden er som følger:

import React from "react";
import { useState } from "react";
import { StyleSheet, View } from "react-native";
import { SearchBar } from "react-native-elements";
import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view";
import ScreenWrapper from "../styled/ScreenWrapper";

const HomeScreen = (): JSX.Element => {
  const [searchString, setSearchString] = useState("");

  function updateSearch(val:string):void {
      setSearchString(val)
  }

  return (
    <ScreenWrapper>
      <KeyboardAwareScrollView
        contentContainerStyle={styles.container}
        resetScrollToCoords={{ x: 0, y: 0 }}
        scrollEnabled={false}
      >
        <SearchBar
          placeholder="Type here to search tournaments"
          onChangeText={updateSearch}
          value={searchString}
        />
      </KeyboardAwareScrollView>
    </ScreenWrapper>
  );
};

Koden ser ut til å kompilere og kjøre helt fint, men feilen i editoren gjør meg gal. Er det en god grunn til at dette vises?

Svar #1

Kompilatoren mener at funksjonen din updateSearch kan bli kalt i en kontekst som forventer () => any, antagelig på grunn av typingen på attributtet onChangeText. Siden funksjonen din kan bli kalt uten noen argumenter, mener kompilatoren at det er en feil at funksjonen din krever et argument. Du kan fikse dette ved å gjøre val-argumentet valgfritt, for eksempel med en rimelig standardverdi:

function updateSearch(val = ""):void {
    setSearchString(val)
}

Dokumentasjonen for den attributten klargjør ikke hvilke argumenter den gir, men typingen ser ut til å være korrekt i selve koden. Ikke sikker på hva som foregår med kompilatoren her.