Typescript: рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЖрдзрд╛рд░рд┐рдд рдПрдирдореЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдЧре░ 2017  ┬╖  68рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдзрд╛рд░рд┐рдд рдПрдирдо рд╕реЗ рдкрд╣рд▓реЗ, рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рднреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

const BasicEvents = {
    Start: "Start",
    Finish: "Finish"
};

const AdvEvents = {
    ...BasicEvents,
    Pause: "Pause",
    Resume: "Resume"
};

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдПрдирдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛:

enum BasicEvents {
    Start = "Start",
    Finish = "Finish"
};

// extend enum using "extends" keyword
enum AdvEvents extends BasicEvents {
    Pause = "Pause",
    Resume = "Resume"
};

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЙрддреНрдкрд╛рджрд┐рдд рдПрдирдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдпрд╣ рдпрд╛ рддреЛ рдмрд╣реБрдд рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

// extend enum using spread
enum AdvEvents {
    ...BasicEvents,
    Pause = "Pause",
    Resume = "Resume"
};
Awaiting More Feedback Suggestion

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

рд╕рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрдЪреНрдЫреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╣реА рдПрдирдо рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╕рдкреЛрд░реНрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдореИрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВред

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

рдмрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓рд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

enum BasicEvents {
    Start = "Start",
    Finish = "Finish"
};

// extend enum using "extends" keyword
const AdvEvents = {
    ...BasicEvents,
    Pause: "Pause",
    Resume: "Resume"
};

рдзреНрдпрд╛рди рджреЗрдВ, рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯ рдЖ рд╕рдХрддреЗ рд╣реИрдВ

enum E {}

enum BasicEvents {
  Start = 'Start',
  Finish = 'Finish'
}
enum AdvEvents {
  Pause = 'Pause',
  Resume = 'Resume'
}
function enumerate<T1 extends typeof E, T2 extends typeof E>(e1: T1, e2: T2) {
  enum Events {
    Restart = 'Restart'
  }
  return Events as typeof Events & T1 & T2;
}

const e = enumerate(BasicEvents, AdvEvents);

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк, рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

const enum BasicEvents {
  Start = 'Start',
  Finish = 'Finish'
}
const enum AdvEvents {
  Pause = 'Pause',
  Resume = 'Resume'
}
type Events = BasicEvents | AdvEvents;

let e: Events = AdvEvents.Pause;

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЖрдкрдХреЛ AdvEvents.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк const enums рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдареАрдХ рд╣реИред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП Redux рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдПрдирдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

const BasicEvents = {
  Start: 'Start' as 'Start',
  Finish: 'Finish' as 'Finish'
};
type BasicEvents = (typeof BasicEvents)[keyof typeof BasicEvents];

const AdvEvents = {
  ...BasicEvents,
  Pause: 'Pause' as 'Pause',
  Resume: 'Resume' as 'Resume'
};
type AdvEvents = (typeof AdvEvents)[keyof typeof AdvEvents];

рд╕рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрдЪреНрдЫреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╣реА рдПрдирдо рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╕рдкреЛрд░реНрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдореИрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВред

Enum рдХреЗ рдмрдЬрд╛рдп рдмрд╕ class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореИрдВ рдмрд╕ рдпрд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред

const BasicEvents = {
    Start: 'Start' as 'Start',
    Finish: 'Finish' as 'Finish'
};

type BasicEvents = (typeof BasicEvents)[keyof typeof BasicEvents];

const AdvEvents = {
    ...BasicEvents,
    Pause: 'Pause' as 'Pause',
    Resume: 'Resume' as 'Resume'
};

type AdvEvents = (typeof AdvEvents)[keyof typeof AdvEvents];

type sometype<T extends AdvEvents> =
    T extends typeof AdvEvents.Start ? 'Some String' :
    T extends typeof AdvEvents.Finish ? 'Some Other String' :
    T extends typeof AdvEvents.Pause ? 'Abc' :
    T extends typeof AdvEvents.Resume ? 'Xyz' : never;
type r = sometype<typeof AdvEvents.Finish>;

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ? рдХреЛрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ, рд╕рд╣рдЬ рд╡реНрдпрд╡рд╣рд╛рд░, 80+ рд▓реЛрдЧ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЦреЛрдЬ рдХреА рдФрд░ рдорд╛рдВрдЧ рдХреА - рдпрд╣ рдмрд┐рдирд╛ рджрд┐рдорд╛рдЧ рдХреЗ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдирдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдирдо рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдЬреАрдм рд╣реИ (рдФрд░ рдПрдирдо рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдирдо рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЯрд╛рдЗрдк рдирд╣реАрдВ рд╣реИ):

import { Foo as _Foo } from './Foo';

namespace Bar
{
    enum Foo extends _Foo {} // nope, doesn't work

    const Foo = _Foo;
    type Foo = _Foo;
}

Bar.Foo // actually not an enum

obrazek

+1
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рджреЗрд╢реА рдПрдирдо рдлреАрдЪрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдЙрдард╛рдпрд╛ рд╣реИред (рд▓рдЧрддрд╛ рддреЛ рдирд╣реА рджреЗрддрд╛ред)

рдУрдкреА рд╕реЗ:

enum BasicEvents {
    Start = "Start",
    Finish = "Finish"
};

// extend enum using "extends" keyword
enum AdvEvents extends BasicEvents {
    Pause = "Pause",
    Resume = "Resume"
};

рдХреНрдпрд╛ рд▓реЛрдЧ AdvEvents рдХреЛ BasicEvents рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ? (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП extends рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред)

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╡рд╣ рдЬрд╛рд▓ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдПрдирдо рдкреНрд░рдХрд╛рд░ рдЕрдВрддрд┐рдо рд╣реИрдВ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

@masak рдорд╣рд╛рди рдмрд┐рдВрджреБред рд▓реЛрдЧ рдпрд╣рд╛рдВ рдЬреЛ рдлреАрдЪрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп extends рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред BasicEvents рдХреЛ AdvEvents рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рджреВрд╕рд░реА рддрд░рдлред рд╕рд╛рдорд╛рдиреНрдп extends рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдЕрдзрд┐рдХ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╢рд╛рдпрдж extends рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ enum A extends B { ред

рдЙрд╕ рдиреЛрдЯ рдкрд░, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдУрдкреА рд╕реЗ рдкреНрд░рд╕рд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рдЖрдпрд╛ред

// extend enum using spread
enum AdvEvents {
    ...BasicEvents,
    Pause = "Pause",
    Resume = "Resume"
};

рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд╕рдВрдмрджреНрдз рдкреНрд░рддрд┐ рдореЗрдВ рдореВрд▓ рдЙрдерд▓реЗ-рдХреНрд▓реЛрди рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд░рдЦрддрд╛ рд╣реИред

BasicEvents рдХреЛ AdvEvents рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рджреВрд╕рд░реА рддрд░рдлред

рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП , рдЕрдЧрд░ рдЖрдк рджреЗрдЦреЗрдВ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЛрдореЗрди-рдирд┐рд░реНрднрд░ рд╣реЛрдЧрд╛ рдФрд░ рдЙрди рдПрдирдо рдорд╛рдиреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрд╛, рдФрд░ https://github.com/Microsoft/TypeScript/issues/17592#issuecomment -331491147 рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдк рдореВрд▓реНрдп рдореЗрдВ Events рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕реНрдерд╛рди:

enum BasicEvents {
  Start = 'Start',
  Finish = 'Finish'
}
enum AdvEvents {
  Pause = 'Pause',
  Resume = 'Resume'
}
type Events = BasicEvents | AdvEvents;
const Events = {...BasicEvents, ...AdvEvents};

let e: Events = Events.Pause;

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Events.Start рдХреЛ BasicEvents.Start рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдердХрд╛рд╡рдЯ рдХреА рдЬрд╛рдВрдЪ рдФрд░ рднреЗрджрднрд╛рд╡рдкреВрд░реНрдг рд╕рдВрдШ рд╢реЛрдзрди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ рдХрд┐ рдЖрдк Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЖрдкрдХреЛ AdvEvents.Pause рдЪрд╛рд╣рд┐рдПред рдЖрдк typeof Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ AdvEvents.Pause рдХреЗ рд▓рд┐рдП рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реА рдЯреАрдо рдХреЗ рд▓реЛрдЧ рдЙрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдореИрдВ AdvEvents.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВред

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

рдПрдХ рдФрд░ рд╕реБрдЭрд╛рд╡ (рднрд▓реЗ рд╣реА рдпрд╣ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдШ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

type BEs = "Start" | "Finish";

type AEs = BEs | "Pause" | "Resume";

let example: AEs = "Finish"; // there is even autocompletion

рддреЛ, рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

const BasicEvents = {
    Start: "Start",
    Finish: "Finish"
};
// { Start: string, Finish: string };


const BasicEvents = {
    Start: "Start",
    Finish: "Finish"
} as const
// { Start: 'Start', Finish: 'Finish' };

https://github.com/Microsoft/TypeScript/pull/29510

рдПрдирдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рддреЛ рдмрд╕ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ'

@wottpal рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рджреЛрд╣рд░рд╛ рд░рд╣рд╛ рд╣реИ:

рдпрджрд┐ [enums рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ], рддреЛ рдпрд╣ рдЬрд╛рд▓ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ enum рдкреНрд░рдХрд╛рд░ рдЕрдВрддрд┐рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдирдо рд╡реИрд▓реНрдпреВ рдкрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╕рдордЧреНрд░рддрд╛ рдЬрд╛рдВрдЪ рдПрдирдо рдХреА рдЧреИрд░-рд╡рд┐рд╕реНрддрд╛рд░рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред

@masak рдХреНрдпрд╛? рдирд╣реАрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ! рдЪреВрдВрдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореВрд▓ рдПрдирдо рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдирдо рдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдирдпрд╛ рдПрдирдо рдмрдирд╛рдирд╛, рди рдХрд┐ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ред

enum A { a; }
enum B extends A { b; }

declare var a: A;
switch(a) {
    case A.a:
        break;
    default:
        // a is never
}

declare var b: B;
switch(b) {
    case A.a:
        break;
    default:
        // b is B.b
}

@ m93a рдЖрд╣, рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ extends рдпрд╣рд╛рдБ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдПрдХ _copying_ рд╢рдмреНрджрд╛рд░реНрде (рдПрдирдо рдорд╛рдиреЛрдВ рдХрд╛ A рд╕реЗ B ) рдЕрдзрд┐рдХ рд╣реИ? рдлрд┐рд░, рд╣рд╛рдБ, рд╕реНрд╡рд┐рдЪ рдареАрдХ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣рд╛рдБ _some_ рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рдореБрдЭреЗ рдЯреВрдЯреА рд╣реБрдИ рд▓рдЧрддреА рд╣реИред рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ: рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, extends рдирдХрд▓ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ _not_ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ - рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрджрд┐ class B extends A , рддреЛ рд╣рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ B рдХреЛ A рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП let a: A = new B(); рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди enums рдФрд░ extends рдХреЗ рд╕рд╛рде, рд╣рдо let a: A = B.b; рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЬреЛ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ; extends рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдПрдирдо рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред

рдлрд┐рд░ рдмрд╕ рдЗрд╕реЗ expands рдпрд╛ clones рдХрд╣ рд░рд╣реЗ рд╣реИрдВ? тАНтЩВя╕П
рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╣реИ рдЙрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕реАрдзрд╛ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЙрдЪрд┐рдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб (рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рдмрд┐рдирд╛) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдУрдкреА рдФрд░ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд╕реНрдкреНрд░реЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ ( ... ) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

+1 рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлреЙрд▓реНрдЯ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдлреАрдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред :)

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдкрддрд╛ рд╣реИ ??? рдореИрдВ

рдпрджрд┐ рдЙрдЪрд┐рдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб (рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рдмрд┐рдирд╛) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдУрдкреА рдФрд░ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд╕реНрдкреНрд░реЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ (...) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рд╣рд╛рдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдкреВрд░реЗ рдЕрдВрдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рдордЭреМрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рднреНрд░рдорд┐рдд/рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

// extend enum using spread
enum AdvancedEvents {
    ...BasicEvents,
    Pause = "Pause",
    Resume = "Resume"
};

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рднреА рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ "рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" рд▓реЗрдмрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, @RyanCavanaugh ?

рд╕реБрд╡рд┐рдзрд╛ +1 . рдЪрд╛рд╣рддреА рдереА

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЦрдмрд░ рд╣реИ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдПрдирдо рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдореЗрдВ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдЙрдкрдирд╛рдо рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдПрдирдо рдФрд░ export рдХреЛ рджреВрд╕рд░реЗ рдирд╛рдо рд╕реЗ рд▓реЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд▓реЗрддреЗред

@ m93a рдЖрд╣, рддреЛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ extends рдпрд╣рд╛рдБ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдПрдХ _copying_ рд╢рдмреНрджрд╛рд░реНрде (рдПрдирдо рдорд╛рдиреЛрдВ рдХрд╛ A рд╕реЗ B ) рдЕрдзрд┐рдХ рд╣реИ? рдлрд┐рд░, рд╣рд╛рдБ, рд╕реНрд╡рд┐рдЪ рдареАрдХ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣рд╛рдБ _some_ рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рдореБрдЭреЗ рдЯреВрдЯреА рд╣реБрдИ рд▓рдЧрддреА рд╣реИред рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ: рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, extends рдирдХрд▓ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ _not_ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ - рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрджрд┐ class B extends A , рддреЛ рд╣рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ B рдХреЛ A рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП let a: A = new B(); рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди enums рдФрд░ extends рдХреЗ рд╕рд╛рде, рд╣рдо let a: A = B.b; рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЬреЛ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ; extends рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдПрдирдо рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред

@masak рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдзрд╛рд░рдгрд╛ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдЧрд▓рдд рд╣реИред рдмреА enum B extends A рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ "рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдХреЗ рд░реВрдк рдореЗрдВ рдП рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдП рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рдореВрд▓реНрдп рдмреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЬрдм рдЖрдкрдиреЗ рдХрд╣рд╛ рдХрд┐ let a: A = B.b рдЖрдк рдорд╛рди рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдмреА рдореЗрдВ рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП A рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ A рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред let a: A = B.a IS рд╕рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ B, A рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдпрд╣ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ:

class A {
 a() {}
}

class B extends A {
 b() {}
}

let a: A = new B();

a.a();  // valid
a.b();  // invalid via type system since `a` is typed as `A`

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ

invalid access

рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдИрдПрд╕ рд╕рд╣реА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдареАрдХ рдпрд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред enum B extends A рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рд╣рдореЗрд╢рд╛ рдмреА рдПрдирдо рд╕реЗ рдП рдПрдирдо рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмреА рдП рдХрд╛ "рдЙрдкрд╡рд░реНрдЧ" (рдЙрдкрд╡рд░реНрдЧ? рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рд╣реИ) рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдП рдХреЛ рд╕реМрдВрдкреЗ рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирдП рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдбреА

@ рдЬреВрд▓рд┐рдпрди-рдПрд╕рдПрдл рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣рд░ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ ...

...рд▓реЗрдХрд┐рди...:рдереЛрдбрд╝рд╛_рдореБрд╕реНрдХреБрд░рд╛рддрд╛_рдЪреЗрд╣рд░рд╛:

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

// example from OP
enum BasicEvents {
    Start = "Start",
    Finish = "Finish"
};

// extend enum using "extends" keyword
enum AdvEvents extends BasicEvents {
    Pause = "Pause",
    Resume = "Resume"
};

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Pause AdvEvents рдПрдХ _instance_ рд╣реИ рдФрд░ AdvEvents _extends_ BasicEvents , рдХреНрдпрд╛ рдЖрдк Pause рдХреЗ BasicEvents рдХрд╛ _instance_ рд╣реЛрдиреЗ рдХреА рднреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ

рджреВрд╕рд░реА рдУрд░, рдПрдирдо (рдЖрдИрдПрдордПрдЪрдУ) рдХрд╛ рдореВрд▓ рдореВрд▓реНрдп рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ _рдмрдВрдж_/"рдЕрдВрддрд┐рдо" (рдЬреИрд╕рд╛ рдХрд┐, рдЧреИрд░-рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓) рд╣реИрдВ рддрд╛рдХрд┐ switch рдХрдерди рдЬреИрд╕рд╛ рдХреБрдЫ рд╕рдордЧреНрд░рддрд╛ рдЧреНрд░рд╣рдг рдХрд░ рд╕рдХреЗред (рдФрд░ рдЗрд╕рд▓рд┐рдП AdvEvents _extend_ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг BasicEvent #$ рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, enums рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред)

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • Enums рдмрдВрдж/рдЕрдВрддрд┐рдо/рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдХреБрд▓
  • рджреЛ enum рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ extends рд╕рдВрдмрдВрдз
  • (рдЙрдЪрд┐рдд) рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ b B рдФрд░ B extends A $ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддреЛ b A #$ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ

@masak рдореИрдВ рдПрдирдо рдХреЗ рдмрдВрдж рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ (рд░рдирдЯрд╛рдЗрдо рдкрд░) рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рд╕рдордп рд╡рд┐рд╕реНрддрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдирд┐рд░реНрдорд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

(рдЙрдЪрд┐рдд) рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рдпрджрд┐ b, B рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ B, A рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ b, A рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг/рд╡рд░реНрдЧ рджреНрд╡рд┐рднрд╛рдЬрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдирдо рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Enums рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдареАрдХ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рд╡реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реЗрдЯ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рдПрдирдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, B, A рдХрд╛ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ A рдореЗрдВ рдХреЛрдИ рднреА рдорд╛рди B рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди A рдореЗрдВ рдХреЗрд╡рд▓ B рдХреЗ рдХреБрдЫ рдорд╛рди рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЪрд┐рдВрддрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИ...рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред Enum рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг:

const enum A { a = 'a' }
const enum B extends A { b = 'b' }

const foo = (a: A) => console.log(a);
const bar = (b: B) => foo(b);

bar(B.a); // 'a'
bar(B.b); // uh-oh, b doesn't exist on A, so foo would get unexpected behavior

// HOWEVER, this would work just fine...

const baz = (a: A) => bar(a);

baz(A.a); // 'a'
baz(B.a); // 'a'
baz(B.b); // compiler error as expected...

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдирдо рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрддреАрдВ, рддреЛ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рдХрд┐ рдЖрдк B рд╕реЗ A рдХреЛ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдЬрд░реВрд░реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рд┐рд░реНрдл рд╣рд┐рд╕рд╛рдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдИрдИ, рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдХреА рддрд░рд╣ рдЕрдкрдиреЗ рд╡рд┐рд░рд╛рд╕рдд рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рдПрдирдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдКрдкрд░ рдХреА рддрд░рдл рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ "рд╕реБрдкрд░рд╕реЗрдЯ рдПрдирдо рдмреА рдХреЛ рдП рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреА рдХреЗ рд╕рднреА рдорд╛рди рдП рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ" рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ рдЬреВрд▓рд┐рдпрди-рдПрд╕рдПрдл

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг/рд╡рд░реНрдЧ рджреНрд╡рд┐рднрд╛рдЬрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдирдо рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Enums рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред

рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ред

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

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛ рдХреЗ рдПрдирдореНрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рд░рдВрдЧреАрди рд╣реВрдВред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдПрдирдо рдорд╛рди рд╡рд╕реНрддреБрддрдГ рдЙрдирдХреЗ рдПрдирдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рд╡рд╛рд░, рдПрдХ рдПрдирдо рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдирдо рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ ред (рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ enum рдХреАрд╡рд░реНрдб рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣реБрдб рдХреЗ рддрд╣рдд рдпрд╣реА рд╣реЛрддрд╛ рд╣реИред) рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдирдо рдХреЛ рд╕рднреА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╡рд░реНрдЧ рдорд┐рд▓рддреЗ рд╣реИрдВ: рд╡реЗ рдлрд╝реАрд▓реНрдб, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ... рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдПрдирдо рд╕рджрд╕реНрдп _are_ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред (рдЬреЗрдПрд▓рдПрд╕ рдЙрддрдирд╛ рд╣реА рдХрд╣рддрд╛ рд╣реИред)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдирдо рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдирдо рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ _am_ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдирдо/рдПрдирдо рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╡рд░реНрдЧ/рдЙрджрд╛рд╣рд░рдг "рд╕рдордЭ" рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░рдирд╛ рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж/рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред "рдПрдХ рдПрдирдо _is_ рдПрдХ рд╡рд░реНрдЧ" рдпрд╛ "рдПрдХ рдПрдирдо рд╕рджрд╕реНрдп _is_ рдПрдХ рдЙрджрд╛рд╣рд░рдг" рдирд╣реАрдВ ... рд▓реЗрдХрд┐рди рд╕рдорд╛рдирддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдЧреЗ рдмрдврд╝рддреА рд╣реИрдВред

рдХреНрдпрд╛ рд╕рдорд╛рдирддрд╛рдПрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╕рджрд╕реНрдпрддрд╛ рдЯрд╛рдЗрдк рдХрд░реЗрдВред

enum Foo { A, B, C }
enum Bar { X, Y, Z }

let foo: Foo = Foo.C;
foo = Bar.Z;

рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдЯрд╛рдЗрдкрдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Bar.Z рдПрдХ Foo рдирд╣реАрдВ рд╣реИред рдлрд┐рд░, рдпрд╣ _actually_ рд╡рд░реНрдЧ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рд╣реА рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ Foo рдФрд░ Bar рд╡рд░реНрдЧ рдереЗ рдФрд░ рдЫрд╣ рд╕рджрд╕реНрдп рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрджрд╛рд╣рд░рдг рдереЗред

(рд╣рдо рдЗрд╕ рддрд░реНрдХ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ let foo: Foo = 2; рднреА рд╢рдмреНрджрд╛рд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдиреВрдиреА рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, number рдорд╛рди рдПрдирдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред)

Enums рдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдХрд┐ рд╡реЗ _closed_ рд╣реИрдВ - рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рдирд╣реАрдВ рдкрддрд╛ рд╣реИ - рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдирдо рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рджрд╕реНрдп _only_ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдПрдирдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЯрд╛рдЗрдкрдореИрдЪ рдХрд░рддреЗ рд╣реИрдВред ("рдмрдВрдж" рдЬреИрд╕рд╛ рдХрд┐ "рдмрдВрдж-рд╡рд┐рд╢реНрд╡ рдкрд░рд┐рдХрд▓реНрдкрдирд╛" рдореЗрдВ рд╣реИред) рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреБрд▓ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдПрдирдо рдкрд░ switch рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдирдо рдкрд░ extends рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рдЪрд▓реА рдЬрд╛рддреА рд╣реИред

рдЖрдк рд▓рд┐рдЦрд┐рдП,

рдореИрдВ рдПрдирдореНрд╕ рдХреЗ рдмрдВрдж рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ (рд░рдирдЯрд╛рдЗрдо рдкрд░) рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рд╕рдордп рд╡рд┐рд╕реНрддрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдирд┐рд░реНрдорд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдПрдирдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдХреЛрдб рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЗ рдПрдирдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдЪрд╛рдирдХ _new_ рдПрдирдо рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд╣рд░, рдЖрдкрдХреЗ рдПрдирдо рдХреЛ рднреА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреЗ рд╣реИрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдПрдирдо рдЕрдм рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рднреА рдирд╣реАрдВред

рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдорддрд▓рдм рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдЕрдирд╛рдбрд╝реА рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: extends enum рдкрд░ рдПрдирдо рдХреА рд╕рдмрд╕реЗ рдХреАрдорддреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ ' рдлрд┐рд░ рд╕реЗ рдмрдВрджред рдХреГрдкрдпрд╛ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рддрдиреА рднрд╛рд╖рд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ _forbid_ рдПрдХ рдПрдирдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░/рдЙрдк-рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░ рд░рд╣реА рд╣реИрдВред

рдореИрдВрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪрд╛, рдФрд░ #17592 (рдЯрд┐рдкреНрдкрдгреА) рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдореВрд▓реНрдп рд╕реНрдерд╛рди рдореЗрдВ Events рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

enum BasicEvents {
  Start = 'Start',
  Finish = 'Finish'
}
enum AdvEvents {
  Pause = 'Pause',
  Resume = 'Resume'
}
type Events = BasicEvents | AdvEvents;
const Events = {...BasicEvents, ...AdvEvents};

let e: Events = Events.Pause;

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Events.Start рдХреЛ BasicEvents.Start рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдердХрд╛рд╡рдЯ рдХреА рдЬрд╛рдВрдЪ рдФрд░ рднреЗрджрднрд╛рд╡рдкреВрд░реНрдг рд╕рдВрдШ рд╢реЛрдзрди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ рдХрд┐ рдЖрдк Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЖрдкрдХреЛ AdvEvents.Pause рдЪрд╛рд╣рд┐рдПред рдЖрдк _can_ typeof Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ AdvEvents.Pause рдХреЗ рд▓рд┐рдП рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реА рдЯреАрдо рдХреЗ рд▓реЛрдЧ рдЙрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдореИрдВ AdvEvents.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рд╣рд╛рде рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рдл рд╕рдорд╛рдзрд╛рди рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @alangpierce : +1:

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

@sdwvit рдореИрдВ рдореВрд▓ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрд┐рдВрджреБ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ (рдУрдкреА рд╕реЗ, рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж рджреЛ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛) рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬреНрдЮрд╛рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рднреА рдХреЛ рдЦреБрд╢ рдХрд░ рджреЗрдЧрд╛:

// extend enum using spread
enum AdvEvents {
    ...BasicEvents,
    Pause = "Pause",
    Resume = "Resume"
};

рдпрд╣ _me_ рдХреЛ рдЦреБрд╢ рдХрд░ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА "рдЗрд╕ рдЕрдиреНрдп рдПрдирдо рдореЗрдВ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдВ" рд╕реБрд╡рд┐рдзрд╛ _with_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ extends рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдорд╛рдирддрд╛ рд╣реВрдВред ... рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рдЯрд╛рд▓рддрд╛ рд╣реИ, рди рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рднреА "рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рдЙрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдореБрдЦреНрдп рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдкреАрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдорд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

@masak рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЕрдм рд╕рднреА рдЪрд░реНрдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ :)

рдореИрдВ рдЗрд╕реЗ рд╣реЛрддреЗ рд╣реБрдП рджреЗрдЦрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рд╕рднреА рдПрдирдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЖрдзрд╛рд░рд┐рдд рдПрдирдо рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдирд┐рд▓рд╛ рдиреНрдпреВрдореЗрд░рд┐рдХ рдПрдирдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ред рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░/рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ?

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ "рдЙрд╕реА рдкреНрд░рдХрд╛рд░" рдПрдирдо рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдврд╝рд╛рддрд╛ рд╣реИ)ред рд╡рд┐рд╖рдо рдПрдирдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рд╕рдорд░реНрдерди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрдИ рдПрдирдореЛрдВ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╣рдо рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ? рд╢рд╛рдмреНрджрд┐рдХ рдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛?

  • рдХреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдореЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

  • рдХреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ?

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ enums рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдирд┐рд╣рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди 1 рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред

  • рдмрд┐рдЯ-рдорд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдЪрд╛рд░?

рдЖрджрд┐ рдЖрджрд┐ред

@JeffreyMercado рдпреЗ рдЕрдЪреНрдЫреЗ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдиреАрдЪреЗ рдореЗрд░реЗ рдЙрддреНрддрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдПрдХ "рд░реВрдврд╝рд┐рд╡рд╛рджреА" рдбрд┐рдЬрд╝рд╛рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ "рдЪрд▓реЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрдм рдРрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд░рд╣рддреЗ рд╣реБрдП рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ")ред

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ "рдЙрд╕реА рдкреНрд░рдХрд╛рд░" рдПрдирдо рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдврд╝рд╛рддрд╛ рд╣реИ)

рдореИрдВ рднреА рдРрд╕рд╛ рдорд╛рдирддрд╛ рд╣реВрдБред рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдПрдирдо рдЕрддрд┐-рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

  • рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрдИ рдПрдирдореЛрдВ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╣рдо рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ? рд╢рд╛рдмреНрджрд┐рдХ рдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛?

рдЪреВрдВрдХрд┐ рдпрд╣ рд╢рдмреНрджрд╛рд░реНрде рдХреА рдирдХрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрдИ рдПрдирдореЛрдВ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдорд▓реНрдЯреАрдкрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдП рд▓рд╛ рд╕реА ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ "рдЕрдзрд┐рдХ рдареАрдХ" рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХреЗ рд╕рд╛рджреГрд╢реНрдп рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд░рд╣реЗрдВ: let newEnum = { ...enumA, ...enumB };

рдХреНрдпрд╛ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рд░реВрдврд╝рд┐рд╡рд╛рджреА рдмрд╛рдд "рд╣рд╛рдВ" рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХреА рд╕рд╛рджреГрд╢реНрдпрддрд╛ рд╣рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢рдмреНрджрд╛рд░реНрде рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ: рдЕрдВрддрд┐рдо рдЬреАрддред

рдореИрдВ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдирдо рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рдУрд░ рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХреА рдХрдореА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЯрдХрд░рд╛рд╡реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд░реВрдврд╝рд┐рд╡рд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕реБрдЦрдж рдЧреБрдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордЭрд╛рдирд╛/рдЖрдВрддрд░рд┐рдХ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ (рддрд╛рдЬрд╛ рдХреЛрдб рдореЗрдВ, рдпрд╛ рдХреЛрдб рдЬрд┐рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  • рдХреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдореЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рдФрд░ рддрд░реНрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╣реИрдВред

  • рдХреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ?

рдореИрдВ рдкрд╣рд▓реЗ рдпрд╣ рдХрд╣рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ "рдЖрдЦрд┐рд░реА рдПрдХ рдЬреАрдд" рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, "рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ" рдФрд░ "рдЖрдЦрд┐рд░реА рдПрдХ рдЬреАрдд" рджреЛрдиреЛрдВ рдХреЗ рддрд╣рдд, рдореБрдЭреЗ рд╕реВрдЪреА рдореЗрдВ рдлреИрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдирдо рд╕рджрд╕реНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП _want_ рднреА рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЬреИрд╕реЗ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕ рдЖрд╢рдп рдХрд╛ рд╕рдВрдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рд╕реНрдкреНрд░реЗрдб рдХреБрдЫ рд╣рдж рддрдХ "рдЖрдпрд╛рдд" рдХреА рддрд░рд╣ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдирдо рд╕рджрд╕реНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдмрд╛рдж рдПрдирдо рд╕реНрдкреНрд░реЗрдб рдбрд╛рд▓рдиреЗ рд╕реЗ рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдареАрдХ рд╣реЛрдЧрд╛)ред рдпрджрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд┐рдВрдЯрд░ рдФрд░ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдореНрдореЗрд▓рди рдЯрд╛рд▓рдиреЗ рдпреЛрдЧреНрдп рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдареЛрд╕ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ enums рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдирд┐рд╣рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди 1 рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред

рд╢рд╛рдпрдж рд░реВрдврд╝рд┐рд╡рд╛рджреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╕рд╛рд░ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

  • рдмрд┐рдЯ-рдорд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдЪрд╛рд░?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдПрдирдо, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдХреБрдЫ рдЙрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

export enum Unit {
    SECONDS,
    MINUTES,
    HOURS,
    DAYS,
    WEEKS,
    MONTHS,
    YEARS,
    DECADES,
    CENTURIES,
    MILLENNIA
}

interface Labels {
    SINGULAR: Record<Unit, string>
    PLURAL: Record<Unit, string>
    LAST: string;
    DELIM: string;
    NOW: string;
}

export const EnglishLabels: Labels = {
    SINGULAR: {
        [Unit.SECONDS]: ' second',
        [Unit.MINUTES]: ' minute',
        [Unit.HOURS]: ' hour',
        [Unit.DAYS]: ' day',
        [Unit.WEEKS]: ' week',
        [Unit.MONTHS]: ' month',
        [Unit.YEARS]: ' year',
        [Unit.DECADES]: ' decade',
        [Unit.CENTURIES]: ' century',
        [Unit.MILLENNIA]: ' millennium'
    },
    PLURAL: {
        [Unit.SECONDS]: ' seconds',
        [Unit.MINUTES]: ' minutes',
        [Unit.HOURS]: ' hours',
        [Unit.DAYS]: ' days',
        [Unit.WEEKS]: ' weeks',
        [Unit.MONTHS]: ' months',
        [Unit.YEARS]: ' years',
        [Unit.DECADES]: ' decades',
        [Unit.CENTURIES]: ' centuries',
        [Unit.MILLENNIA]: ' millennia'
    },
    LAST: ' and ',
    DELIM: ', ',
    NOW: ''
}

@illeatmyhat рдпрд╣ enums рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рд▓реЗрдХрд┐рди ... рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ enum рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ _using_ рдПрдирдо рд╣реИред

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдирдо рдФрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдордЧреНрд░рддрд╛ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рд╣реИ; рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдиреЗ рдмрд╛рдж рдореЗрдВ рдПрдХ рдПрдирдо рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рд╛ рд╣реИ, рд╡рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ SINGULAR рдФрд░ PLURAL рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рд╕рдХрддрд╛ рд╣реИред Label рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ PLURAL рд░рд┐рдХреЙрд░реНрдбред)

@masak

рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдиреЗ рдмрд╛рдж рдореЗрдВ рдПрдХ рдПрдирдо рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рд╛ рд╣реИ, рд╡рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ SINGULAR рдФрд░ PLURAL рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рд╕рдХрддрд╛ рд╣реИ $#$2 Label #$ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВред)

рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдирдо рд╕рджрд╕реНрдп SINGULAR рдпрд╛ PLURAL рд╕реЗ рдЧрд╛рдпрдм рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Record рдкреНрд░рдХрд╛рд░ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬрдмрдХрд┐ TS рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред enum inheritance рдЬрдм рдореИрдВрдиреЗ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреЗрдЦрд╛, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдзрд╛рдЧрд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ред рд╡реИрд╕реЗ рднреА рддрд░реАрдХрд╛ рдЧрд▓рдд рдирд┐рдХрд▓рд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреА рд╣реИред

@illeatmyhat

рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдирдо рд╕рджрд╕реНрдп SINGULAR рдпрд╛ PLURAL рд╕реЗ рдЧрд╛рдпрдм рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Record рдкреНрд░рдХрд╛рд░ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдУрд╣! рдЯреАрдЖрдИрдПрд▓ред рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдирдо рд╡рд┐рд░рд╛рд╕рдд рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рдЕрдВрддрддрдГ рдЖрдкрдХреЗ рдкреИрдЯрд░реНрди рдкрд░ рдЙрддрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдмрд╛рдд рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ; "рдПрдХреНрд╕/рд╡рд╛рдИ рд╕рдорд╕реНрдпрд╛рдПрдВ" рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪреАрдЬ рд╣реИрдВред рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдореИрдВ MyEnum рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ", рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдЖрдк рдХреА рддрд░рд╣ Record<MyEnum, string> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@masak рдХрд╛ рдЬрд╡рд╛рдм :

Enums рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рддреА рд╣реИред

рдЖрдк рд▓рд┐рдЦрд┐рдП,

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

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

рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВред рдПрдирдо рдмрдВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд░рдЪрдирд╛" рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рджрд┐рд▓ рд╣реИ рдЬреЛ рд╣рдо рдпрд╣рд╛рдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрддрди "рдПрдХ рд╕рд╛рде рд╕рд┐рд▓рд╛рдИ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдореЛрдВ рдХреЛ рдХрд╛рдлреА рд╕реБрдВрджрд░ рдврдВрдЧ рд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

enum ComposedEnum = { ...EnumA, ...EnumB }

рддреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ extends . рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореЗрд░рд╛ рдЗрд╕реНрддреАрдлрд╛


@masak рдХреЗ @JeffreyMercado рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ "рдЙрд╕реА рдкреНрд░рдХрд╛рд░" рдПрдирдо рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдврд╝рд╛рддрд╛ рд╣реИ)ред рд╡рд┐рд╖рдо рдПрдирдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рд╕рдорд░реНрдерди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рднреА рдРрд╕рд╛ рдорд╛рдирддрд╛ рд╣реВрдБред рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдПрдирдо рдЕрддрд┐-рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

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

рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдордЬрдмреВрдд рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдирд╣реАрдВ?

  • рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрдИ рдПрдирдореЛрдВ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╣рдо рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ? рд╢рд╛рдмреНрджрд┐рдХ рдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛?

рдЪреВрдВрдХрд┐ рдпрд╣ рд╢рдмреНрджрд╛рд░реНрде рдХреА рдирдХрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрдИ рдПрдирдореЛрдВ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдорд▓реНрдЯреАрдкрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдП рд▓рд╛ рд╕реА ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ "рдЕрдзрд┐рдХ рдареАрдХ" рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХреЗ рд╕рд╛рджреГрд╢реНрдп рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ: let newEnum = {...enumA, ...enumB};

100% рд╕рд╣рдордд

  • рдХреНрдпрд╛ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП?

рд░реВрдврд╝рд┐рд╡рд╛рджреА рдмрд╛рдд "рд╣рд╛рдВ" рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХреА рд╕рд╛рджреГрд╢реНрдпрддрд╛ рд╣рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢рдмреНрджрд╛рд░реНрде рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ: рдЕрдВрддрд┐рдо рдЬреАрддред

рдореИрдВ рдпрд╣рд╛рдБ рдлрдЯрд╛ рд╣реБрдЖ рд╣реВрдБред рдЬрдмрдХрд┐ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ "рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕" рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ? рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЬреНрдЮрд╛рдд рдкреНрд░рд╕рд╛рд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╣реИред рдПрдХ рдУрд░, рдореБрдЭреЗ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдмрд╣реБрдд рд╕реА рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдлреИрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ "рдкрд┐рдЫрд▓реЗ рдПрдХ рдЬреАрдд" рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╕рд╛рд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдореА рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЖрд╕рд╛рди рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╕реНрддреБ рд╡реИрд╕реЗ рднреА рдПрдХ рдирдХреНрд╢рд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдо рдЙрдореНрдореАрджреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рднреА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдХрдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдиреЗ рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред

рдХрд┐рд╕реА рдорд╛рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ)ред

рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рджреЛрдиреЛрдВ "рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ" рдФрд░ "рдЖрдЦрд┐рд░реА рдПрдХ рдЬреАрдд" рдХреЗ рддрд╣рдд, рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдПрдирдо рдлреИрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдирдо рд╕рджрд╕реНрдп рдШреЛрд╖рдгрд╛рдПрдВ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕ рдЖрд╢рдп рдХрд╛ рд╕рдВрдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рд╕реНрдкреНрд░реЗрдб рдХреБрдЫ рд╣рдж рддрдХ "рдЖрдпрд╛рдд" рдХреА рддрд░рд╣ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

рдЦреИрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдкреНрд░рд╕рд╛рд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрджреЗрд╢ рдХреНрдпрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рднрд▓реЗ рд╣реА рд╣рдо рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЖрджреЗрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛, рд╣реИ рдирд╛? рдЖрджреЗрд╢ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЯрдХрд░рд╛рд╡ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ enums рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдирд┐рд╣рд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди 1 рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред

рд╢рд╛рдпрдж рд░реВрдврд╝рд┐рд╡рд╛рджреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╕рд╛рд░ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдПрдирдо рдлреИрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЯреАрдПрд╕ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдЬреВрд▓рд┐рдпрди-рдПрд╕рдПрдл

рдЗрд╕рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореЗрд░рд╛ рдЗрд╕реНрддреАрдлрд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ

:+1: рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реЛрд╕рд╛рдпрдЯреА рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдЬрдпрдХрд╛рд░ рдХрд░рддреА рд╣реИред

рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рджреЛрдиреЛрдВ "рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ" рдФрд░ "рдЖрдЦрд┐рд░реА рдПрдХ рдЬреАрдд" рдХреЗ рддрд╣рдд, рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдПрдирдо рдлреИрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдирдо рд╕рджрд╕реНрдп рдШреЛрд╖рдгрд╛рдПрдВ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕ рдЖрд╢рдп рдХрд╛ рд╕рдВрдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рд╕реНрдкреНрд░реЗрдб рдХреБрдЫ рд╣рдж рддрдХ "рдЖрдпрд╛рдд" рдХреА рддрд░рд╣ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

рдЦреИрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдкреНрд░рд╕рд╛рд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрджреЗрд╢ рдХреНрдпрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рднрд▓реЗ рд╣реА рд╣рдо рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЖрджреЗрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛, рд╣реИ рдирд╛? рдЖрджреЗрд╢ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЯрдХрд░рд╛рд╡ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ "рд╕рд╛рдорд╛рдиреНрдп рд╕рджрд╕реНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдмрд╛рдж рд╕реНрдкреНрд░реЗрдб рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ"; рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ "рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рддрд╣рдд, рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛"ред рдпреЗ рджреЛрдиреЛрдВ рдмрд╛рддреЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдЪ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдкреНрд░рд╕рд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдПрдХ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдкрд░ рдкрдбрд╝рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдпрд╣ рдПрдХ рд▓рд┐рдВрдЯрд░ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ; рдпрд╛ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрджреЗрд╢ рдореЗрдВ рдХреЛрдИ рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдирдо рд╕реНрдкреНрд░реЗрдб рдлреАрдЪрд░ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рд╕рд┐рдЦрд╛рдиреЗ / рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред

рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реЗ рдЬреЗрдПрд╕ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдерд▓реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ extends рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдмрдВрдз рд╣реИред рд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдПрдирдо рдмрдирд╛рдирд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рд╣реЛрдЧрд╛ред

рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХреБрдЫ рдХрд╛рдо, рдЬрдмрдХрд┐ рдорд╛рдиреНрдп рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рд╕рдорд╛рди рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдПрдХ рдПрдирдо рдХреА рдЕрдВрддрд┐рдо рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХреГрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдирдо рдмрдирд╛рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛ред

рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рддрдЪреАрдд рдкрд░ 3 рд╕рд╛рд▓ рдЕрднреА рднреА рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред

@ jmitchell38488 рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдп рдиреЗ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЪрд░реНрдЪрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реИ рдЬреЛ рдХреБрдЫ c++- рдЬреИрд╕реЗ рднрд╛рд╖рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдбрд░рд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЛрдВ ( class A extends B рдФрд░ class A { ...(class B {}) } ) рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ extend рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП extend рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@masak wdyt? ^

@sdwvit рдореИрдВ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ enums рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рд╡реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд░рд╛рд╕рдд рдлреИрд╢рди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреЗрдПрд╕ рдХреА рдкреНрд░рдХреГрддрд┐ рдФрд░ рдЕрдВрддрд┐рдо рдкрд╛рд░рджрд░реНрд╢реА рдореВрд▓реНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдирдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд╣реЛрдЧрд╛ред

@masak wdyt? ^

рд╣рдореНрдоред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдПрдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд▓рдХреНрд╖реНрдп рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕рдорд╛рди ... рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ _a рдкреНрд░рд╛рдердорд┐рдХрддрд╛_ рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ рдХрдордЬреЛрд░ рдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рд╣реИ, рдФрд░ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ: (рдП) рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рддрдВрддреНрд░ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдПрдирдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ рдЬреЛ рд▓реЛрдЧ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд░рд╣реЗ рд╣реИрдВ); (рдмреА) рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдиреБрдореЛрджрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдХреБрдЫ рдЕрд░реНрдереЛрдВ рдореЗрдВ рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд╣реЛрддреА рд╣реИрдВред (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ ES6 рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЗ рдХрд░реАрдм рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдХреНрд░рд┐рдп рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╢реАрд░реНрд╖ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдкреАрдЖрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреАрдЖрд░ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдордп рдФрд░ рдореЗрд╣рдирдд рд▓рдЧрддреА рд╣реИ, рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрд┐ рдЖрдкрдХреЛ рдлреАрдЪрд░ рдЪрд╛рд╣рд┐рдПред :рдЖрдБрдЦ рдорд╛рд░рдирд╛:

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рднреА рдкреВрд░реА рдирд╣реАрдВ рдХреА рд╣реИ, рд╣рд╛рд╣рд╛!

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдХрд░реАрдм рдЖ рдЧрдП рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдЬреЛрдбрд╝ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж "рдЪреИрдВрдкрд┐рдпрди" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдЯреАрдо рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЖрдиреЗ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" рд╕реЗ "рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" (рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдордп рдХреА рдХрдореА рдФрд░ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЖрдВрджреЛрд▓рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЬрдм рднреА рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

рдпрд╣ рдлреАрдЪрд░ рднреА рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред 37 рдорд╣реАрдиреЗ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдЧрддрд┐ рд╣реЛрдЧреА

рд╣рд╛рд▓ рдХреА рдмреИрдардХ рдХреЗ рдиреЛрдЯреНрд╕:

  • рд╣рдореЗрдВ рд╕реНрдкреНрд░реЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ extends рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд░реНрде рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдПрдирдо "рд╡рд┐рд╕реНрддрд╛рд░" рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рдмрдирд╛рддрд╛ рд╣реИред

    enum BasicEvents {
     Start = "Start",
     Finish = "Finish"
    }
    enum AdvEvents {
     ...BasicEvents,
     Pause = "Pause",
     Resume = "Resume"
    }
    
  • рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ AdvEvents.Start рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣рдЪрд╛рди рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ BasicEvents.Start ред рдЗрд╕рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ BasicEvents.Start рдФрд░ AdvEvents.Start рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рдХрд╛рд░ BasicEvents рдХреЛ AdvEvents рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣рдЬ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╕рд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВ рд╣реИ - рдпрджрд┐ рд╣рдо рдкреНрд░рд╕рд╛рд░ рдХреЛ рдЙрд╕ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ:

    enum BasicEvents {
     Start = "Start",
     Finish = "Finish"
    }
    enum AdvEvents {
     Start = "Start",
     Finish = "Finish",
     Pause = "Pause",
     Resume = "Resume"
    }
    

    рдЗрд╕рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ- рдпрд╣рд╛рдВ, BasicEvents.Start рдФрд░ AdvEvents.Start рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдореНрд╕ рдХреА рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдХ рджреВрд╕рд░реЗ рдХреЛ _not_ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред

    рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдФрд░ рдорд╛рдореВрд▓реА рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ AdvEvents.Start рдХреЛ рд╢рд╛рдпрдж BasicEvents.Start рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд╡рд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдШреЛрд╖рдгрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХрдо рд╕реЗ рдХрдо рдЬрд╣рд╛рдВ рд╕рджрд╕реНрдп рдХреЛ AdvEvents рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред -рд╢рд╛рдмреНрджрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ AdvEvents.Start рдкрд░ рд╣реЛрд╡рд░ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рддреНрд╡рд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдЬреЛ AdvEvents.Start рдХрд╣рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА BasicEvents.Start рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

  • рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдореЗрдВ рд╣реА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

рдореИрдВ рдЗрд╕ рдкрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХреГрдд рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВ, рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рдЦрд░рд╛рдм рд▓рдЧрддреЗ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк 1: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдиреА рд╣реИ

рдпрджрд┐ рд╕реНрдкреНрд░реЗрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреИрд▓рд╛ рд╣реБрдЖ рдПрдирдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рддреЛ рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЬрдм рд▓реЛрдЧ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдХрд╛ рдореВрд▓реНрдп рдерд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 2: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдиреА рдирд╣реАрдВ рд╣реИ

рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдкреНрд░реЗрдб рдереНрд░реЗрдб рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдкрд╛рд╕ @ aj-r рдХреЗ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрдмрд▓ рдкрд░ рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдордЭрджрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛ рд╣рдо рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЬреАрдм рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рд╡ рдХреА "рд╕рд░рд▓рддрд╛" рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддрд╛ рд╣реИред

рд▓реЛрдЧ рдХреМрди рд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпреЛрдВ?

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 1 рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдбрд╝реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 2 рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ @aj-r рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ let e: Events = Events.Pause; рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛ред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ; рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдереВрд▓ рд╣реИред

рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 1 рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдФрд░ рджреЛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдПрдВ рдорд┐рд▓реАрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛, рдФрд░ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдФрд░ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдореЗрдВ), рдЫреЛрдЯреЗ рдПрдирдо рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдбрд╝реЗ рдПрдирдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреА рд╕реНрдкрд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ . рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ... рдкреЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк 2 рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдпрд╛ as unknown as Events.Pause рдЬреИрд╕реЗ рд╣реИрдХреНрд╕ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛) рдЬрдм рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реАрдХреЗ рд╣реИрдВ: рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдирд┐рдкреЗрдЯ, рд╕рд╛рде рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╕рдВрдШреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгред рд╡рд┐рдХрд▓реНрдк 1 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк 2 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдФрд░ рдЧрд▓рдд рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдФрд░ рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреА рд╣реИред

рд▓реЛрдЧ рдХреМрди рд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпреЛрдВ?

рдЪреВрдВрдХрд┐ рдХреЛрдб рд╢рдмреНрджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреЛрд░ рд╕реЗ рдмреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рдУрдкреА рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

const BasicEvents = {
    Start: "Start",
    Finish: "Finish"
};
enum AdvEvents {
    ...BasicEvents,
    Pause = "Pause", // We added a new field
    Finish = "Finish2" // Oops, we actually modified a field in the parent enum
};
// The TypeScript compiler should refuse to compile this code
// But after removing the "Finish2" line,
// the TypeScript compiler should successfully handle it as one would normally expect with the spread operator

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдХрд▓реНрдк 2 рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 2 рдХреА рд╕рдЦреНрдд рдЬрд░реВрд░рдд рд╣реИред

рдЕрдиреНрдпрдерд╛ рд╣рдо рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЬреАрдм рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рд╡ рдХреА "рд╕рд░рд▓рддрд╛" рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 2 рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдкреАрдЫреЗ рд╣рдЯ рдЬрд╛рдПрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЖрдЬ рдХреЗ рдПрдирдо рдореЗрдВ рдХреЛрдИ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдЦреЛрдЬ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/microsoft/TypeScript/issues/17592#issuecomment -449440944 рдореЗрдВ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдЗрди рджрд┐рдиреЛрдВ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

type Events = BasicEvents | AdvEvents;
const Events = {...BasicEvents, ...AdvEvents};

рдореБрдЭреЗ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рджреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:

  • рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ; рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрд╛рдЗрдк рд╕реНрдкреЗрд╕ рдмрдирд╛рдо рд╡реИрд▓реНрдпреВ рд╕реНрдкреЗрд╕ рдкрд░ рдареЛрд╕ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред
  • рдпрд╣ рдЕрдзреВрд░рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ Events.Pause рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ https://github.com/microsoft/TypeScript/issues/29130 рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдЬреЛ (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рджреВрд╕рд░реЗ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдирд╛рдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдЧрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ const рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рднреА рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

// Declares a value and a type at the same time with the same name (just like `enum` and `class` already do).
// Requires the right-hand side to be either a unit type or an object where all values are unit types.
// The JS emit would just take out the word "type" and leave everything else.
const type Events = {...BasicEvents, ...AdvEvents};
...
const e: Events.Pause = Events.Pause;
...
// The syntax could also make this pattern more ergonomic.
const type INACCESSIBLE = "INACCESSIBLE";
const response: {name: string, favoriteColor: string} | INACCESSIBLE = INACCESSIBLE;

рдпрд╣ рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдирдо рдмрд┐рд▓реНрдХреБрд▓ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИрдВред (рдореЗрд░реЗ рд▓рд┐рдП, рдПрдирдореНрд╕ рдиреЗ рд╣рдореЗрд╢рд╛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЯреАрдПрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рдЙрддреНрд╕рд░реНрдЬрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рд╕реНрддрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдордорд╛рддреНрд░ рд╣реИрдВред) const type рдШреЛрд╖рдгрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рднреА рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдирдо рдмрдирд╛рдПрдВ:

const type BasicEvents = {
  Start: 'Start',
  Finish: 'Finish',
};  // "as const" would be implicit for "const type" declarations.

рдмреЗрд╢рдХ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ BasicEvents рдкреНрд░рдХрд╛рд░ BasicEvents typeof BasicEvents[keyof typeof BasicEvents] рд▓рд┐рдП рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реИ, рдЬреЛ рдХрд┐ const type рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рдмреБрд░рд╛ const enum рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ .

рд╡рд╣рд╛рдВ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдПрдирдо рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЯрд░рд▓реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдирд╛рдордорд╛рддреНрд░ рдХрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛрдЧрд╛ред рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ as unique рдпрд╛ const unique type рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдирдо-рдЬреИрд╕реЗ рдирд╛рдордорд╛рддреНрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рднреАред Events рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рдХрд▓реНрдк 1 рдФрд░ рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рднреА рджреЗрдЧрд╛: рдЖрдк unique рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк Events рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ (рд╡рд┐рдХрд▓реНрдк 1) рдмрдирд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк unique рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк Events рдФрд░ BasicEvents (рд╡рд┐рдХрд▓реНрдк 2) рдХреЗ рдмреАрдЪ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

const type рдФрд░ const unique type рдХреЗ рд╕рд╛рде, рдореМрдЬреВрджрд╛ рдПрдирдореЛрдВ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдмрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЯреАрдПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдо рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдореИрдВ

рд╡рд╛рд╣ 2017 рд╕реЗ , рдЖрдкрдХреЛ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рд┐рдП?

рдЖрдкрдХреЛ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣реАрдВ??? рд╣рдо рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ!

рдЖрдкрдХреЛ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣реАрдВ??? рд╣рдо рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ!

рд╣рд╛рдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдерд╛ред

рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рджреЗрдЦрдирд╛ рднреА #40998 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ ... рдПрдореБрдиреНрд╕ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдирдо рдХреЛ рдорд░реНрдЬ/рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдЕрдкрдиреА рд░рд╛рдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдпреЛрдЧреНрдп рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ @alangpierce рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдорд╛рдкреНрдд рд╣реБрдЖред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдирд┐рдпреЛрдХреНрддрд╛ рдХреЗ рдкреНрд░рддрд┐ рдореЗрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдпрд╣рд╛рдВ рдХреЛрдб рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдмрд┐рдВрджреБ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  1. рджреЛрд╣рд░рд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдШреЛрд╖рдгрд╛рдПрдБ (рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдПрдХ рдирдП рдПрдирдо рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯ) рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА рдФрд░ рдЗрд╕рд╕реЗ рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрд╣реБрдд рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реБрдЖред
  2. рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдирдо рдиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯ рдереЗред рдЯрд╛рдЗрдк рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реА рдХрд┐ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАрдВ: рдпрд╣ рдкреВрд░реА рдмрд╛рдд рдХрд╛ рдмрд┐рдВрджреБ рдерд╛ рдФрд░ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖред
  3. рдореИрдВрдиреЗ рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛ рд╡рд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдерд╛, рдФрд░ рдЬрдмрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдирдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд╣рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рдерд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреЛ рдХрд┐ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдореЛрдВ рдХрд╛ рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдерд╛, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рдЫрд┐рдкрд╛рддрд╛ рдерд╛ред
  4. рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд░рдгреЛрдВ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛ (рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдирдо рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдмрд╛рдК рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╡рд╛рд▓реА рдмрд╣реБрдд рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмрд╣реБрдд рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдПрдирдо рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЧрд▓рдд рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рд╕реНрддреБрдд рдмрдирд╛рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

рдирдорд╕реНрддреЗ,

рдореБрдЭреЗ рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рдиреЗ рджреЗрдВ

рдореЗрд░рд╛ рд╕рдВрджрд░реНрдн

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдУрдкрдирдПрдкреА рджрд╕реНрддрд╛рд╡реЗрдЬ tsoa рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдореЗрд░реЗ рдореЙрдбрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ:

enum EntityStatus {
    created = 'created',
    started = 'started',
    paused = 'paused',
    stopped = 'stopped',
    archived = 'archived',
}

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ setStatus рд╣реИ рдЬреЛ рдЗрди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд▓реЗрддреА рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдирдо рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛:

enum RequestedEntityStatus {
    started = 'started',
    paused = 'paused',
    stopped = 'stopped',
}

рддреЛ рдореЗрд░реА рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ:

public setStatus(status: RequestedEntityStatus) {
   this.status = status;
}

рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

Conversion of type 'RequestedEntityStatus' to type 'EntityStatus' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.

рдЬреЛ рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрддреНрд╕реБрдХ рдерд╛ рдФрд░ рдЬрдм рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛, рддреЛ рдЗрд╕ рднрдВрдбрд╛рд░ рдХреЛ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рд╕рднреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдпрд╛ рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛) рдЬреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред

рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдПрдХ рдПрдирдо рд╕реЗ "рд╡рд┐рд╕реНрддрд╛рд░" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ EntityStatus RequestedEntityStatus рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрдзрд┐рдХ-рдЬреЗрдиреЗрд░рд┐рдХ рдПрдирдо рд╕реЗ "рдкрд┐рдХ" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рдм

рдореИрдВрдиреЗ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдмреЗрд╣рддрд░ рдкрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдЧреЗ рдЬрд╛рдХрд░ рдпреЗ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

enum EntityStatus {
    created = 'created',
    started = 'started',
    paused = 'paused',
    stopped = 'stopped',
    archived = 'archived',
}

enum RequestedEntityStatus {
    // Pick/Reuse from EntityStatus
    EntityStatus.started,
    EntityStatus.paused,
    EntityStatus.stopped,
}

// Fake enum, just to demonstrate
enum TargetStatus {
    {...RequestedEntityStatus},
    // Why not another spread here?
    //{...AnotherEnum},
    EntityStatus.archived,
}

public class Entity {
    private status: EntityStatus = 'created'; // Why not a cast here, if types are compatible, and deserializable from a JSON. EntityStatus would just act as a type union here.

    public setStatus(requestedStatus: RequestedEntityStatus) {
        if (this.status === (requestedStatus as EntityStatus)) { // Should be OK because types are compatible, but the cast would be needed to avoid comparing oranges and apples
            return;
        }

        if (requestedStatus == RequestedStatus.stopped) { // Should be accessible from the enum as if it was declared inside.
            console.log('Stopping...');
        }

        this.status = requestedStatus;// Should work, since EntityStatus contains all the enum members that RequestedEntityStatus has.
    }

    public getStatusAsStatusRequest() : RequestedEntityStatus {
        if (this.status === EntityStatus.created || this.status === EntityStatus.archived) {
            throw new Error('Invalid status');
        }
        return this.status as RequestedEntityStatus; // We have  eliminated the cases where the conversion is impossible, so the conversion should be possible now.
    }
}

рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░, рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

enum A { a = 'a' }
enum B { a = 'a' }

const a:A = A.a;
const b:B = B.a;

console.log(a === b);// Should not say "This condition will always return 'false' since the types 'A' and 'B' have no overlap.". They do have overlaps

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ

рдореИрдВ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреВрдирд┐рдпрдиреЛрдВ ( 'a' | 'b' ) рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдо рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЙрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░, рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рд╡рд╛рд▓реЗ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдПрдирдореЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдирдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:

enum A { a = 'a', b = 'b' }
enum B { a = 'a' , c = 'c' }
enum C { ...A, c = 'c' }

рдФрд░ рддреАрди рдЪрд░ a:A , b:B рдФрд░ c:C

  • c = a рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ A, C рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП A рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди C рдХрд╛ рдорд╛рдиреНрдп рдорд╛рди рд╣реИ
  • c = b рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдмреА рд╕рд┐рд░реНрдл 'a' | 'c' рд╣реИ рдЬреЛ рд╕реА рдХреЗ рджреЛрдиреЛрдВ рд╡реИрдз рдорд╛рди рд╣реИрдВ
  • b = a рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ a рдХреЛ 'b' рд╕реЗ рдЕрд▓рдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХреЗрд╡рд▓ 'a' рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛)
  • a = b , рдЗрд╕реА рддрд░рд╣, рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ b рдХреЛ 'c' рд╕реЗ рдЕрд▓рдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
  • b = c рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ c рдХреЛ 'b' рд╕реЗ рдЕрд▓рдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ 'a'|'c' рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреА рд╣реИ)

рдпрд╛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреА рдУрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд▓рд╛рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?

рдПрдирдо рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рдВрдШрд░реНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореИрдВ "рдЕрдВрддрд┐рдо рдЬреАрдд" рдирд┐рдпрдо рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдпрд╣ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐, рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╛ рддреЛ "рдХреБрдВрдЬреА" рдпрд╛ рдПрдирдо рдХрд╛ "рдорд╛рди" рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдХреБрдВрдЬреА рдФрд░ рдорд╛рди рджреЛрдиреЛрдВ рд╕рдорд╛рди рди рд╣реЛрдВ:

enum A { a = 'a', b = 'b' }
enum B { a = 'a' , c = 'c' }
enum C {...A, ...B } // OK, equivalent to enum C { a = 'a', b = 'b', c = 'c' }, a is deduplicated
enum D {...A, a = 'd' } // Error : Redefinition of a
enum E {...A, d = 'a' } // Error : Duplicate key with value 'a'

рд╕рдорд╛рдкрди

рдореБрдЭреЗ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЯреАрдПрд╕ рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдПрдирдо рдХреНрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ ( as unknown as T рдХреА рддреБрд▓рдирд╛ рдореЗрдВ) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдПрдирдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдПрдирдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред
рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ? рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рднрд╛рд╖рд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╛рдж рдЖрдИ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдмрдирд╛рддреА рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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