рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рднрд╛рдЧ 2.5 - рдмрдЧ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

рднрд╛рдЧ 1: рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд▓реЛрдбрд┐рдВрдЧ
рднрд╛рдЧ 2: рдШрдЯрдирд╛рдПрдБ рдпрд╛ рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдХреЛ рдордЬрдмреВрдд рдХреНрдпреЛрдВ рдХрд░реЗрдВ

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

рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдмрдЧ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕реЗ рд╕рд╣реА рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рдореБрджрд╛рдп рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рддреЛ, рдореЗрд░рд╛ WinAmp рдУрдЬрд╝реА рдСрд╕реНрдмреЙрд░реНрди рд╣рд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдирд┐рднрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред

рддреНрд░реБрдЯрд┐


рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, "рдЯрд╛рдЗрдкрд┐рдВрдЧ рдИрд╡реЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣рд╛рдВ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рд╕реЗ рдкреВрд░реНрдг рдХреЛрдб рд╣реИ):

export class Event<Callback extends Function, Options> { private Callbacks: Callback[] = []; public Add(callback: Callback): ITypedSubscription<Callback, Event<Callback, Options>> { var that = this; var res: ITypedSubscription<Callback, Event<Callback, Options>> = { Callback: callback, Event: that, Unsubscribe: function () { that.Remove(callback); } } this.Callbacks.push(callback); return res; } public Remove(callback: Callback): void { var filteredList: Callback[] = []; for (var i = 0; i < this.Callbacks.length; i++) { //  .     if (this.Callbacks[i] !== callback) { filteredList.push(callback); } } this.Callbacks = filteredList; } public Trigger(options: Options): void { for (var i = 0; i < this.Callbacks.length; i++) { this.Callbacks[i](options); } } } 


рддреНрд░реБрдЯрд┐ рдпрд╣ рдереА рдХрд┐ Event рд╡рд░реНрдЧ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ:

 Event<Callback extends Function, Options> 


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

рдФрд░ рдлрд┐рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рд╕реНрдЯреНрд░реАрдЯ рдореИрдЬрд┐рдХред

рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ


рд░реВрд╕реА рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐:

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

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

рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдорддрд▓рдм рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЬреЗрдПрд╕ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд░реАрдм, рдпрд╣ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд░ рд╣реИ рдЬреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЬреЗрдПрд╕ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреАред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЯреАрдПрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЙрд▓рдмреИрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ:

 function Boo(callback: (strings: string[]) => string) { /*  */ } 


рдпрд╣рд╛рдВ рд╣рдо рдХреЙрд▓рдмреИрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рд▓реЗрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдШрдЯрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╣рд╛рди рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, TS 0.9 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрд░ рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди Google рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред рдЦреЛрдЬ рдХреЗ рджреВрд╕рд░реЗ рдШрдВрдЯреЗ рдореЗрдВ рдЯреАрдПрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдкрд░ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛:

 export interface IDelegateTest { (options: any); } var test: IDelegateTest = function (options: any) { } 


рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде, рд╣рдо рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ IDelegateTest рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИ:

 // var test: IDelegateTest = function (settings: any) { } 


рдЗрд╕ рддрд░рд╣ рдПрдХ:

 //  var test: IDelegateTest = function (options?: any) { } 


рдФрд░ рдпрд╣ рднреА рдПрдХ:

 //   ,     var test: IDelegateTest = function () { } 


рдпрд╛ рдпрд╣ рдПрдХ:

 // !!! var test: IDelegateTest = function (options: number) { } 


"рдмрдВрдж рдХрд░реЛ!" рдЪреМрдХрд╕ рдкрд╛рдардХ рдХрд╣реЗрдЧрд╛ред рд╣рдо рд╡реЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрддреНрддрд░: options рдХреЛ any рд░реВрдк options рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рдХреНрд╖рдорд╛ рдХрд░рддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ 10 рдорд┐рдирдЯ рдмрд┐рддрд╛рдП рдЬрдм рддрдХ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг "рддреАрди рдкрд╛рдЗрдВрд╕ рдореЗрдВ" рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдФрд░ рдЗрд╕ рдЬрд╛рд▓ рдореЗрдВ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ:

 export interface IDelegateTest { //   (options: string); } // Cannot convert '(options: number) => void' to 'IDelegateTest' var test1: IDelegateTest = function (options: number) { } //Call signatures of types '(options?: number) => void' and 'IDelegateTest' are incompatible. var test2: IDelegateTest = function (options?: number) { } //   var test3: IDelegateTest = function (settings: string) { } 


рджреВрд╕рд░реЗ, рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд░реАрдореЗрдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕реЗ рд╕рд╣реА рдирд╛рдо рджреЗрдВрдЧреЗред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдмрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:

 export interface ICallback<ArgType> { (arg: ArgType, context?: any); } 


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

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдирд┐рд╣рд┐рдд рдмрд┐рдВрджреБ рд╣реИред рдпрджрд┐ рдЖрдк C #: (object sender, EventArgs args) рдХреА рдкрд░рдВрдкрд░рд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкрд╣рд▓реЗ context рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ TS рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ: рдПрдХ рдмрдЧ рдпрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред

рдШрдЯрдирд╛ рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реЗрдВ:

 export interface ICallbackDesc<ArgType> { Callback: ICallback<ArgType>; Subscriber: any; } 


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

рд╣рдорд╛рд░реЗ Event рд╡рд░реНрдЧ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:

 export class Event<ArgType> { private Callbacks: ICallbackDesc<ArgType>[] = []; /**    * @param {ICallback<ArgType>} callback Callback,       * @param {any} subscriber ,      callback * @returns {ITypedSubscription<ArgType>}    */ public Subscribe(callback: ICallback<ArgType>, subscriber: any): ITypedSubscription<ArgType> { var that = this; var res: ITypedSubscription<ArgType> = { Callback: callback, Event: that, Unsubscribe: function () { that.Unsubscribe(callback); } } this.Callbacks.push({ Callback: callback, Subscriber: subscriber }); return res; } public Unsubscribe(callback: ICallback<ArgType>): void { //  } public Trigger(arg: ArgType, context?: any): void { //  } } 


рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ ICallback.

Trigger :

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
рдХрд┐ рдЕрдм Callback (рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛ рд╣реБрдЖ рд╣реИ) рд╣рдореЗрд╢рд╛ ICallback.

Trigger :

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ ICallback.

Trigger :

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
 ICallback. 

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .
ICallback.

Trigger
:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }

, :

export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }

:

public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }

// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });

Unsubscribe

:

public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }

!== . . () - , . , , Unsubscribe . .. .., , , . .

? . , JS , , TS, . - .

.. :

public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }

2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.



apply:

public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }

. .

Upd. . .

Source: https://habr.com/ru/post/In185290/


All Articles