확장 오류 클래스 - TypeScript
P粉311563823
P粉311563823 2023-10-17 00:02:47
0
2
489

사용자 지정 오류를 발생시키고 "Error" 대신 "CustomError" 클래스 이름을 콘솔에 인쇄하려고 했지만 성공하지 못했습니다.

으아악

출력은 Uncaught Error: Load "foo" very pain.

입니다.

내가 기대한 것: Uncaught CustomError:Lorem“foo”ipsum dolor.

TS만 사용하여(JS 프로토타입을 건드리지 않고) 수행할 수 있는지 궁금합니다.

P粉311563823
P粉311563823

모든 응답(2)
P粉659516906

문제는 super 并且该新对象没有预期的原型链,即它是 Error 的实例,而不是 CustomError 인스턴스를 호출할 때입니다.

이 문제는 Typescript 2.2부터 지원되는 'new.target'을 사용하여 우아하게 해결할 수 있습니다. 여기를 참조하세요: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html

으아아아

new.target 的优点是您不必对原型进行硬编码,就像这里提出的其他一些答案一样。这又具有一个优点,即从 CustomError을 사용하여 상속된 클래스도 자동으로 올바른 프로토타입 체인을 가져옵니다.

프로토타입을 하드코딩하려는 경우(예: Object.setPrototype(this, CustomError.prototype)),CustomError 本身将有一个工作原型链,但任何类从 CustomError 继承将会被破坏,例如class VeryCustomError 的实例不会是预期的 instanceof VeryCustomError,而只是 instanceof CustomError.

참조: https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200

P粉949848849

typescript 버전 2.1을 사용하고 있으며 ES5로 변환 중이신가요? 가능한 문제와 해결 방법은 주요 변경 사항 페이지의 이 섹션을 확인하세요. https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error -array -그리고 지도는 더 이상 일하지 않을 수 있습니다

관련 비트:

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!