현재 예외를 처리하기 위해 다음 코드를 사용하고 있습니다.
@Injectable()
export class CustomExceptionHandler extends ExceptionHandler {
call(error, stackTrace = null, reason = null) {
console.warn(error);
}
코드가 잘 작동하고 콘솔에서 오류를 볼 수 있습니다. 오류는 @ angular / core에 정의 된 Response 객체입니다. 그러나 오류 매개 변수는 'any'입니다. 오류 유형 (예 : error : Response)을 변경할 수 없습니다. 반드시 Response 객체가 아니기 때문에 무엇이든 될 수 있습니다.
(error instanceof Response)를 사용하고 싶었지만 오류는 일종의 객체이기 때문에 작동하지 않습니다.
최신 정보
(error instanceof Response)
결국 작동 하는 것으로 밝혀졌습니다 . 어떤 이유로 VS Code를 사용하여 typescript를 디버깅 할 때 작동하지 않는 것 같습니다. 나는 시계를 달았고 항상 거짓을 반환했습니다. 런타임에 확인하지 않기 때문일 수도 있습니다.
어쨌든 중요한 것은 Angular2 Response 객체의 컨텍스트 instanceof
에서 생성자가있는 것처럼 잘 작동한다는 것입니다.
문제의 범위를 좁히고 객체 유형을 확인하는 다른 방법을 제공 한 @DanSimon에게 감사드립니다!
흥미로운 질문입니다. TypeScript는 실제로 JS로 컴파일하기 때문에 클래스가 실제로 존재하지 않습니다. 확인할 수있는 두 가지 방법을 생각할 수 있습니다. "User-Defined Type Guard"를 사용하거나 "instanceof type guard"를 사용할 수 있습니다. 사용자 정의 유형 가드는 유형을 결정하기 위해 객체의 속성 / 기능을 확인하는 멋진 방법 일뿐입니다. 이점은 TS가 "속성 / 기능 누락"에 대해 불평하지 않는다는 것입니다. "instanceof"를 사용하면 두 Object의 생성자를 비교할 때 Object에 생성자가있는 경우에만 작동합니다. 따라서 Object에 생성자가 없으면 안됩니다. 이 두 가지에 대한 문서는 여기에서 찾을 수 있습니다 .
나는 또한 그들이 어떻게 작동하는지 보여주는 플 런커를 만들었다 . 결과가 콘솔에로드되므로 브라우저 디버그 도구를 사용하여 결과를 확인하세요. 모든 작업은 "ngOnChanges"함수의 "app / child.component.ts"에서 수행됩니다.
ngOnChanges(changes: {[propertyName: string]: SimpleChange}) {
console.log();
console.log("Custom function isSimpleChange:", this.isSimpleChange(changes));
console.log("Using instanceof SimpleChange:", (changes instanceof SimpleChange));
console.log("Using Object.prototype.toString.call():", Object.prototype.toString.call(changes));
console.log("Logging the object itself:",changes);
console.log("-----------------------------------------------------------------------------------------");
let testExample = new ExampleObject();
console.log("Custom function isExampleObject:", this.isExampleObject(testExample));
console.log("Using instanceof ExampleObject:", (testExample instanceof ExampleObject));
console.log("Using Object.prototype.toString.call():" + Object.prototype.toString.call(testExample));
console.log(testExample);
this._result = changes.value.currentValue;
this._changes++;
}
객체의 완전한 검사를 수행하려면 기본 유형에 대해 "typeof"를 모두 활용해야 할 것입니다. 따라서 "typeof"를 사용하여 기본 유형 "string", "number", "boolean"을 확인합니다. 그런 다음 "instanceof"를 사용하여 생성자가 일치하는지 확인하고 마지막으로 "사용자 정의 유형 보호"를 사용하여 특정 "속성 / 함수"를 찾습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다