사용자 지정 오류를 발생시키고 "Error" 대신 "CustomError" 클래스 이름을 콘솔에 인쇄하려고 했지만 성공하지 못했습니다.
으아악출력은 Uncaught Error: Load "foo" very pain
.
내가 기대한 것: Uncaught CustomError:Lorem“foo”ipsum dolor
.
TS만 사용하여(JS 프로토타입을 건드리지 않고) 수행할 수 있는지 궁금합니다.
P粉6595169062023-10-17 19:52:38
문제는 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 < CustomError
的实例不会是预期的 instanceof VeryCustomError
,而只是 instanceof CustomError
.
참조: https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200
P粉9498488492023-10-17 16:00:03
typescript 버전 2.1을 사용하고 있으며 ES5로 변환 중이신가요? 가능한 문제와 해결 방법은 주요 변경 사항 페이지의 이 섹션을 확인하세요. https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error -array -그리고 지도는 더 이상 일하지 않을 수 있습니다
관련 비트: