javascript - Typescript: hvorfor funksjon uten parametere kan kastes til funksjon med parametere


Hvorfor er det ingen kompilasjonsfeil i denne koden? Kode:

function partial(f: (a: string) => string, a: string) : string {
  return "";
}

var test = () => "";
var result = partial(test, "");

Funksjonen "partial" tar som det første argumentet en funksjon som tar ett parameter, men jeg gir den en funksjon som ikke tar noen parametere, og TypeScript-kompilatoren synes dette er greit. Jeg forstår at dette ikke kan ødelegge noe fordi du kan gi alle parametere i verden til funksjonen som ikke tar noen, og det vil ikke ødelegge noe, men det burde være en kompilasjonsfeil fordi TypeScript handler om typer og det er en åpenbar typekonflikt, og det kan muligens være en utviklerfeil.

Finnes det noen løsninger på dette problemet?

Svar #1

det er en åpenbar typemismatch, og det kan muligens være en utviklerfeil.

Det er ingenting som åpenbart er galt med denne koden. Vurder noe som dette:

let items = [1, 2, 3];
// Print each item in the array
items.forEach(item => console.log(item));

Er denne koden korrekt? Definitivt! Men forEach kaller sin tilførte funksjon med tre argumenter, ikke ett. Det ville være tungvint å måtte skrive:

items.forEach((item, unused1, unused2) => console.log(item));

Merk at du fortsatt kan få feil hvis du prøver å gjøre noe som faktisk er feil. For eksempel:

function printNumber(x: number) { console.log(x); }
let strings = ['hello', 'world'];
strings.forEach(printNumber); // Error, can't convert string to number

Relaterte artikler