Typescript: рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдирд╡ре░ 2014  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

ES6 рдХреБрдЫ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдк-рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ, рдмреВрд▓рд┐рдпрди, рддреНрд░реБрдЯрд┐, рдорд╛рдирдЪрд┐рддреНрд░, рд╡рд╛рджрд╛ ..etcред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ lib.d.ts рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдЙрдк-рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ var рдФрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

ES6 рдХрд▓реНрдкрдирд╛ рд╕реЗрдХреНрд╢рди19.5.1:

рддреНрд░реБрдЯрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЙрдк-рд╡рд░реНрдЧреАрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЦрдВрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдк-рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░ рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк "рдПрдХ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ" рддреНрд░реБрдЯрд┐:

class NotImplementedError extends Error {
    constructor() {
        super("Not Implemented");
    }
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 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;
    }
}

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдХрд┐рд╕реА рднреА рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдк-рдпреЛрдЧ рд╣реЛрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрджрд┐ рдореЗрд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлреВ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреВ рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ (рди рдХрд┐ рдХреЗрд╡рд▓ рдлреВ-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ), рддреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛

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 рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рд╡рд╕реНрддреБ
  • рдмреВрд▓рд┐рдпрди
  • рддреНрд░реБрдЯрд┐
  • NativeError
  • рд╕рдВрдЦреНрдпрд╛
  • рджрд┐рдирд╛рдВрдХ
  • рддрд╛рд░
  • рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди
  • рд╕рд░рдгреА
  • TypedArray (Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, рдФрд░ DataView)
  • рдирдХреНрд╢рд╛
  • рд╕реЗрдЯ
  • WeakMap
  • WeakSet
  • ArrayBuffer
  • рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдЦрд╛рдХрд╛
  • рд╡рд╛рджрд╛

рд╕рдорд╕реНрдпрд╛:

  • рдПрдХ рдмрд╛рд░ рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рджрд╕реНрдп рдкрдХреНрд╖ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рд╕реНрдерд┐рд░ рдкрдХреНрд╖ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
  • рд╕рджрд╕реНрдп рдкрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)
  • рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдХреНрд▓рд╛рд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмреВрд▓рд┐рдпрди, рджрд┐рдирд╛рдВрдХ, рд╕рдВрдЦреНрдпрд╛, RegExp, рддреНрд░реБрдЯрд┐ рдФрд░ рд╕рд░рдгреАред (рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рддреЛрдбрд╝)

рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди:

  • рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдПрдХ рдирд┐рд░реНрдорд╛рдг рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
  • рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ (рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ Class.prototype {}, @RyanCavanaug ) рдХреЗ рд╕реМрдЬрдиреНрдп рд╕реЗ
  • рдПрдХ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рдХреЙрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

@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;
    }
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zhuravlikjb picture zhuravlikjb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kyasbal-1994 picture kyasbal-1994  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dlaberge picture dlaberge  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MartynasZilinskas picture MartynasZilinskas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manekinekko picture manekinekko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ