typescript - Parameter av typen any[] accepterar icke-array värde


Låt oss säga att jag har en funktion med en parameter av typen any[]

someFunction(args: any[]): boolean {
  // some code
}

Nu vill jag kalla på funktionen och skicka en array med värden av vilken typ som helst. Det borde vara okej, och det är det:

someFunction([value1, value2, value3]); // OK, as expected

Men, om jag skickar ett värde som inte är en array, förväntar jag mig att få ett typfel, men det gör jag inte:

someFunction(value1); // OK, but shouldn't I get a type error?

Kan någon förklara varför detta inte orsakar ett fel vid kompilering?

Svar #1

Problemet är att om typen av value1 är any så är detta giltigt eftersom any är kompatibel med vilken annan typ som helst, så den kommer att vara kompatibel med any[].

Så till exempel kommer du att få ett fel om du skickar ett nummer till funktionen men inte om du skickar vad som helst

function someFunction(args: any[]): boolean {
  return true
}
declare var value1: any;
someFunction(value1) //ok
someFunction(1) //not ok
declare var nonAny: number;
someFunction(nonAny) //not ok

Svar #2

Den korrekta syntaxen för en array av typen any är:

someFunction(args: Array<any>): boolean {
    // some code
}