angular - Hur kan ett fel av typen any ändras till ett fel av typen Error?
import {NgModule, ErrorHandler} from '@angular/core';
class MyErrorHandler implements ErrorHandler {
handleError(error:any) {
// do something with the exception
console.log('Error',error);
}
}
Jag använder ErrorHandler för att fånga de undantag som genereras. Felet som fångas är av typen ERROR men här i klassen är felet av typen error:any, vilket gör att console.log('Error', error); skriver ut Error Uncaught (in promise): [object Object] eftersom typen av felobjekt är any.
Hur kan jag ändra error-objektet till ERROR i handleError(error:any)?
Svar #1
Typescript gör ingen typkontroll vid körning. Och eftersom ett Error ÄR any (any betyder bara 'vilket objekt som helst'), är det helt giltigt att anropa handleError(error: any) med ett Error-objekt.
Det är lite som att "avstå" från typprovning under transpilering till JavaScript.
Så när du säger: "prints Error Uncaught (in promise): [object Object] eftersom typen av felobjekt är any.", är chansen stor att typen "any" faktiskt ÄR ett Error. När du skriver ut ett objekt till konsolen ser det alltid ut som [object Object] (om inte din konsol har någon fin parsering som Chrome-konsolen, där den visar ett interaktivt objekt). Om du vill ha json: gör error.toJSON() så kommer du att se alla fält i felobjektet och kunna avgöra om det faktiskt är ett Error.
Jag misstänker att du vill göra något i stil med:
console.log('Error', error.message);
Jag vet inte vilka fält Error har utantill. Om du inte heller vet det kan du använda as-kommandot för att göra saker enkelt när du skriver kod:
handleError(e: any) {
// do something with the exception
const error as Error;
console.log('Error', error.message);
}
Självklart, det skulle gå sönder om någon använder det på ett objekt som inte är ett Error-objekt (eller ett objekt som inte har ett message så det är förmodligen bäst att göra en kontroll:
handleError(e: any) {
// do something with the exception
const error as Error;
if (error.message) {
console.log('Error', error.message);
} else {
console.log('Unspecified error!');
}
}
