ES6 рдХреБрдЫ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдк-рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ, рдмреВрд▓рд┐рдпрди, рддреНрд░реБрдЯрд┐, рдорд╛рдирдЪрд┐рддреНрд░, рд╡рд╛рджрд╛ ..etcред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ lib.d.ts рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдЙрдк-рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ var рдФрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
ES6 рдХрд▓реНрдкрдирд╛ рд╕реЗрдХреНрд╢рди19.5.1:
рддреНрд░реБрдЯрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЙрдк-рд╡рд░реНрдЧреАрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЦрдВрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдк-рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░ рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк "рдПрдХ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ" рддреНрд░реБрдЯрд┐:
class NotImplementedError extends Error {
constructor() {
super("Not Implemented");
}
}
рдпрд╣ рдХрд┐рд╕реА рднреА рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдк-рдпреЛрдЧ рд╣реЛрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрджрд┐ рдореЗрд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлреВ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреВ рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ (рди рдХрд┐ рдХреЗрд╡рд▓ рдлреВ-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ), рддреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
class Error;
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрдпрд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдПрдХ рдЕрджреНрдпрддрдиред
рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
class Foo<X, Y> extends Bar<X> implements Baz<Y>;
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ Foo.prototype Bar.prototype рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдмрд╛рдЬ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
@metaweta рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
interface Foo {
}
class Foo; // Foo is now a class!
interface Bar extends Foo {
}
class Bar extends Foo; // Two `extends Foo`s.
interface X {
}
class X extends Foo; // Hmm?
interface Y extends Foo {
}
class Y; // Hmm?
рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрд╡рд░реНрдЧреАрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдУрдкрди-рдПрдВрдбреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред # 819
@metaweta рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рдПрдХ рдкрд░рд┐рд╡реЗрд╢ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ
// myLib.d.ts
declare class Error {
}
// no code emitted here for this.
// myfile.ts
// Error is subclassable,
class MyError extends Error {
}
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕реБрдЭрд╛рд╡ рдЬрд╛рд░реА рдХрд░реВрдВрдЧрд╛ред
рдпрд╣рд╛рдБ ES6 рдХрд▓реНрдкрдирд╛ рд╕реЗ "рдЙрдкрд╡рд░реНрдЧреАрдп" рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрди рд╕рднреА рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ / var рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛:
рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди:
@mhegazy рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдкрд░рд┐рд╡реЗрд╢реА рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЕрдирднрд┐рдЬреНрдЮ рдерд╛ред
рдЬрдм рдореИрдВ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрдврд╝рд╛рддрд╛ рд╣реВрдВ (рдкрд░рд┐рд╡реЗрд╢ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), ExtendedError рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рд╕рдВрджреЗрд╢ рдХреЛ рдареАрдХ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
declare class Error {
constructor(message?: string);
}
class ExtendedError extends Error {
constructor(message?: string) {
super(message + " extended");
}
}
//throw new Error("Test");
throw new ExtendedError("Test");
@ рдпрд╣ рдПрдХ рдЗрдВрдЬрди рдХреЗ рдореБрджреНрджреЗ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИред ES6 рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдЕрдм рдпреЗ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ ES6 рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛ рдЧрдИ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореЗрд░реЗ js рдХреЛрдб рдореЗрдВ рдЬреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдореЗрд░реЗ рдкрд╛рд╕ Error.captureStackTrace рдХреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рддрдм рдирд┐рдХрд╛рд▓рддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВ рдЗрд╕реЗ ts рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╣реИ:
рдпрд╣ рдПрдХ C # рдХреЗ рд╕рдорд╛рди рдЕрдкрд╡рд╛рдж рд╣реИ рдЬреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рд▓реЗрддрд╛ рд╣реИред
declare class Error {
public name:string;
public message:string;
public stack:string;
constructor(message?:string);
static captureStackTrace(error: Error, constructorOpt: any);
}
class Exception extends Error {
public innerException: Error;
constructor(message?: string, innerException?: Error|string) {
// Guard against throw Exception(...) usage.
if (!(this instanceof Exception)) return new Exception(message, innerException);
super();
if (typeof Error.captureStackTrace === 'function') {
//noinspection JSUnresolvedFunction
Error.captureStackTrace(this, arguments.callee);
}
this.name = "Exception";
if (innerException) {
if (innerException instanceof Error) {
this.innerException = innerException;
this.message = message + ", innerException: " + this.innerException.message;
}
else if (typeof innerException === "string") {
this.innerException = new Error(innerException);
this.message = message + ", innerException: " + this.innerException.message;
}
else {
this.innerException = innerException;
this.message = message + ", innerException: " + this.innerException;
}
}
else {
this.message = message;
}
}
}
# 3516 рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рддред рдХрдХреНрд╖рд╛рдПрдВ рдЕрдм рдирд┐рд░реНрдорд╛рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдордирдорд╛рдиреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реИ?
рдореИрдВрдиреЗ 1.5.3 рдФрд░ 1.5.4 рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рд▓реЗрдмрд▓ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдФрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╢рд┐рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрднреА рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рдореЗрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдмрдЧ рдХреЛ "рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.6" рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрдЧ
рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
@kostrse рдЖрдк npm install -g typescript@next
рдЪрд▓рд╛рдХрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.6 рдХреЗ рд╣рдорд╛рд░реЗ рд░рд╛рдд рдХреЗ рд░рд┐рд▓реАрдЬ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирдорд╕реНрддреЗ,
рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.6.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ lib.es6.d.ts рддреНрд░реБрдЯрд┐ (рдФрд░ рд╕рд░рдгреА) рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 1.6.2 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдЪреАрдпрд░реНрд╕!
@jpsfs рдиреЗ рдареАрдХ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ https: // aithjlsberg рджреНрд╡рд╛рд░рд╛ https://github.com/Microsoft/TypeScript/issues/1168#issuecomment -112955503 рдореЗрдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдордирдорд╛рдиреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Error
рд╡рд░реНрдЧ рдХреЗ рджрд┐рдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, Im рдЕрднреА рднреА рдиреЛрдб рдкрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Im рдХреЛ "error.stack" рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдЬрдм рдореИрдВ throw new Error(...)
рд╣реВрдВ рддреЛ рдореБрдЭреЗ error.stack
рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ throw new CustomError()
рд╣реВрдВ - рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛:
export class HttpError extends Error {
httpCode: number;
message: string;
constructor(httpCode: number, message?: string) {
super();
if (httpCode)
this.httpCode = httpCode;
if (message)
this.message = message;
this.stack = new Error().stack;
}
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
Error
рд╡рд░реНрдЧ рдХреЗ рджрд┐рдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, Im рдЕрднреА рднреА рдиреЛрдб рдкрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Im рдХреЛ "error.stack" рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдЬрдм рдореИрдВthrow new Error(...)
рд╣реВрдВ рддреЛ рдореБрдЭреЗerror.stack
рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВthrow new CustomError()
рд╣реВрдВ - рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛: