typescript - Argument av typen '...' kan ikke tilordnes parameter av typen '...' TS 2345
Gitt følgende:
interface MyInterface {
type: string;
}
let arr: object[] = [ {type: 'asdf'}, {type: 'qwerty'}]
// Alphabetical sort
arr.sort((a: MyInterface, b: MyInterface) => {
if (a.type < b.type) return -1;
if (a.type > b.type) return 1;
return 0;
});
Kan noen hjelpe med å tyde TS-feilen:
// TypeScript Error
[ts]
Argument of type '(a: MyInterface, b: MyInterface) => 0 | 1 | -1' is not assignable to parameter of type '(a: object, b: object) => number'.
Types of parameters 'a' and 'a' are incompatible.
Type '{}' is missing the following properties from type 'MyInterface': type [2345]
Svar #1
Her er et forenklet eksempel for å gjenskape feilen:
interface MyInterface {
type: string;
}
let arr:object[] = []
// Error: "object" is not compatible with MyInterface
arr.sort((a: MyInterface, b: MyInterface) => {});
Grunnen til at det er en feil er fordi object ikke kan tilordnes til noe som er av typen MyInterface:
interface MyInterface {
type: string;
}
declare let foo: object;
declare let bar: MyInterface;
// ERROR: object not assignable to MyInterface
bar = foo;
Og grunnen til at dette er en feil er fordi object er synonymt med {}. {} har ikke type-egenskapen og er derfor ikke kompatibel med MyInterface.
Fiks
Kanskje du mente å bruke any (i stedet for object). any er kompatibelt med alt.
Bedre fikse
Bruk den eksakte typen, dvs. MyInterface
interface MyInterface {
type: string;
}
let arr:MyInterface[] = []; // Add correct annotation 🌹
arr.sort((a: MyInterface, b: MyInterface) => {});
