Typescript: Lib.d.ts рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ currentTarget рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

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

рдЬрдм lib.d.ts рд╕реЗ рдЗрд╡реЗрдВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХреЛ рдкреНрд░рдХрд╛рд░ рдЗрд╡реЗрдВрдЯ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдИрд╡реЗрдВрдЯ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЯрд╛рд░реНрдЧреЗрдЯ рдЧреБрдг EventTarget рдХрд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдпрд╣ рдЯрд╛рдЗрдк рдПрд▓реАрдореЗрдВрдЯ / HTMLElement рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

lib.d.ts Suggestion help wanted

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

рдореИрдВ JS onload FileReader TS2339: Property 'result' does not exist on type 'EventTarget' рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рдШрдЯрдирд╛ рдкрд░ getSummary() рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА FileReader рдХреЗ onerror ред

рдореЗрд░рд╛ рдХрд╛рдо-рдХреЗ рдЖрд╕рдкрд╛рд╕, рднрдпрд╛рдирдХ рд▓рд╛рд▓ рд╕реНрдХреНрд╡реАрдЬреАрд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ;-) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

interface FileReaderEventTarget extends EventTarget {
    result:string
}

interface FileReaderEvent extends Event {
    target: FileReaderEventTarget;
    getMessage():string;
}

рдлрд┐рд░ рдореЗрд░реЗ рдРрдк рдореЗрдВ:

reader.onload = function(fre:FileReaderEvent) {
        var data = JSON.parse(fre.target.result);
        ...
    }

рдЙрддреНрдкрдиреНрди рдЬреЗрдПрд╕ рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди, рдЕрд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, lib.d.ts рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВред

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

XMLHttpRequest рдСрдмреНрдЬреЗрдХреНрдЯ рднреА currentTarget рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ Element / HTMLElement рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдпрд╣реА рд╡рдЬрд╣ рд╣реЛред рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛?

interface Event<T extends EventTarget> {
    /* ... */
    currentTarget: T;
    /* ... */
}

interface EventListener<T extends EventTarget> {
    (evt: Event<T>): void;
}

interface HTMLElement {
    /* ... */
    addEventListener(type: string, listener: EventListener<HTMLElement>, useCapture?: boolean): void;
}

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

3 рдЕрдЧрд╕реНрдд 2014 рдХреЛ 13:34 рдкрд░, SaschaNaz рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

XMLHttpRequest рдСрдмреНрдЬреЗрдХреНрдЯ рднреА currentTarget рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ Element / HTMLElement рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдпрд╣реА рд╡рдЬрд╣ рд╣реЛред рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛?

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╡реЗрдВрдЯ{
/ * ... _ /
currentTarget: рдЯреА;
/ _ ... * /
}

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╡реЗрдВрдЯрд▓рд┐рд╕реНрдЯ{
(evt: рдИрд╡реЗрдВрдЯ): рд╢реВрдиреНрдп;
}

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ HTMLElement {
/ * ... * /
addEventListener (рдкреНрд░рдХрд╛рд░: рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╢реНрд░реЛрддрд╛: EventListener, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ;: рдмреВрд▓рд┐рдпрди): рд╢реВрдиреНрдп;
}
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рд░ рдШрдЯрдирд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп Element (http://www.w3.org/TR/DOM-Level-3-Events/#event-types) рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП @SaschaNaz рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреА рддрд░реНрдЬ рдкрд░ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдкрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ lib.d.ts рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рд╕рдордп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирдП рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЙрд╕рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЗрд╕ рд╕рдордп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо lib.d.ts рдкреАрдврд╝реА рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдЗрдирдкреБрдЯ рдкрд░ рдкреАрдЖрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрднреА рдХреЗ рд▓рд┐рдП 'Revisit' рдХреЛ рдЯреИрдЧ рдХрд░рдирд╛ - рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдкрд┐рдВрдЧ рдХрд░реЗрдВ рдФрд░ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХрд╣рд╛рдВ рдкрд░ рд╣реИрдВред

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

interface HTMLElement {
    addEventListener(type: string, listener: EventListener<this>, useCapture?: boolean): void;
}

var image: HTMLImageElement;
var video: HTMLVideoElement;
image.addEventListener // receives EventListener<HTMLImageElement> type
video.addEventListener // receives EventListener<HTMLVideoElement> type

рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ # 285 рдФрд░ # 229 рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд╣рд╛рдп рд╕рдм, рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдерд╛рдореЗред рдореИрдВ Event.target рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдПрдХ рд▓рдХреНрд╖реНрдп рдПрдХ HTMLElement ред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ @SaschaNaz рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛" рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирдпрд╛ рд╣реВрдВ)ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдиреЗ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛: (<HTMLElement>event.target).tagName

@rayshan рдХрд╛ рд╕реБрдЭрд╛рд╡ рдерд╛ рдХрд┐ lib.d.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реАрдзреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рд╕рдЯреАрдХ рд╣реИред рдЕрднреА рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдЯ рдЗрди рд▓реАрдм ( --noLib ) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рдЖрдкрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЕрднреА рдХреНрдпреЛрдВрдХрд┐ DOM рд╕рдмрд╕реЗ рд╕реБрд╕рдВрдЧрдд / рд╕рдВрд░рдЪрд┐рдд / рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд / рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ APIs рдХрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ) рдореЗрдВ DOM рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХрдИ рдЪреБрдиреМрддрд┐рдпрд╛рдБ рд╣реИрдВред

рдЕрдм рдЬрдм # 4910 рдХрд╛ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

рдкреАрдЖрд░рдПрд╕ рдиреЗ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ lib.d.ts рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдпреЛрдЧрджрд╛рди рдкрд░ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ: https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md#contributing -libdts-fix

рдореИрдВ JS onload FileReader TS2339: Property 'result' does not exist on type 'EventTarget' рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рдШрдЯрдирд╛ рдкрд░ getSummary() рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА FileReader рдХреЗ onerror ред

рдореЗрд░рд╛ рдХрд╛рдо-рдХреЗ рдЖрд╕рдкрд╛рд╕, рднрдпрд╛рдирдХ рд▓рд╛рд▓ рд╕реНрдХреНрд╡реАрдЬреАрд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ;-) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

interface FileReaderEventTarget extends EventTarget {
    result:string
}

interface FileReaderEvent extends Event {
    target: FileReaderEventTarget;
    getMessage():string;
}

рдлрд┐рд░ рдореЗрд░реЗ рдРрдк рдореЗрдВ:

reader.onload = function(fre:FileReaderEvent) {
        var data = JSON.parse(fre.target.result);
        ...
    }

рдЙрддреНрдкрдиреНрди рдЬреЗрдПрд╕ рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди, рдЕрд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, lib.d.ts рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд░рдВрдЯрдЧреЗрдЯ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдиреНрджрд░реНрдн TSJS рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдЙрддреНрдкрдиреНрди webworker.generated.d.ts рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ idea рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рд▓рдЧрднрдЧ 3 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рджреБрдЦреА рдХрд░рддрд╛ рд╣реИред

рдХреБрдВрдЖред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВ рдПрдХ PR https://github.com/Microsoft/TSJS-lib-generator/pull/202 рдмрдирд╛рддрд╛ рд╣реВрдВ
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ Property 'getBoundingClientRect' does not exist on type 'EventTarget'. ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдЦреИрд░, рдкреАрдЖрд░ рд▓рдЧрднрдЧ 2 рдорд╣реАрдиреЗ рд╕реЗ рд▓рдВрдмрд┐рдд рд╣реИред рдЕрдЧрд░ рдЗрд╕ рдкрд░ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо currentTarget рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП HTMLInputElement.onchange (event: Event<HTMLInputElement>) => void рдЯрд╛рдЗрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ event.currentTarget.value рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд╕реНрдЯ рдХреЗ рдХрд╛рдо рдХрд░реЗрдВред рдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдирд╣реАрдВред

рдпрд╣ рдЬреЗрдиреЗрд░рд┐рдХ рдХреА рд╡рдЬрд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрдиреЗрд░рд┐рдХ рдбрдмрд▓реНрд╕ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ issue

рдХреНрдпрд╛ рдпреЗ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд░рд┐рдПрдХреНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ?

lib.d.ts рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрдорд╛рдВрдб рдореЗрдВ --diagnostics рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@felixfbecker рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рддрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдпрд╛ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЫреЛрдбрд╝ рдЪреБрдХреЗ рд╣реИрдВред рдЗрд╕реАрд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рд╣реИрдВред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╕рдВрд╕реНрдХрд░рдг 1.18.0 (1.18.0) рдореЗрдВ рдореМрдЬреВрдж рд╣реИ

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

рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ ... рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рд╣реИред

рдЬрдм рдореИрдВ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдгреАрдп 4 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрджреНрджрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░, рдЬрдмрдХрд┐ рдПрдирдЬреА рд╕рд░реНрд╡ рдХреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП .. рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдгреАрдп рдЙрддреНрдкрд╛рджрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдбреЛрдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

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

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд▓рдЧрднрдЧ 4 рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Https://github.com/Microsoft/TSJS-lib-generator/pull//207 рдореЗрдВ рдПрдХ рдлрд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИ
рд▓реЗрдХрд┐рди @saschanaz рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИред

11 рдкрд░ рдкрд╛рд░реНрдЯреА рдЯреЛрдирд┐рдВрдЧ рдХрд░рдирд╛ - рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЛ рдЕрдирд▓реЛрдб рдХрд░реЗрдВ:
confirmationMessage(event: BeforeUnloadEvent): any {
const activeElement: HTMLElement = <HTMLElement>(<Document>event.target).activeElement;

: Dancing_men:

рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛

    readonly currentTarget: Element | null;
    readonly target: Element | null;

UIEvent рд╣реА? рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдЦреБрд╢ рдХрд░рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдмрд┐рдирд╛ | null рдХрд┐рд╕реА UIEvent рдкрд░ рднреА рджреЛрдиреЛрдВ рд╣рдореЗрд╢рд╛ рд╕реЗрдЯ рд░рд╣рддреЗ рд╣реИрдВ

рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде Vue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди event.target.value рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рднрд▓реЗ рд╣реА - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ - рдПрдХ рдкрд╛рда рдЗрдирдСрдЙрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдХрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛:

this.url = (<any>event).target.result;

рдЗрд╡реЗрдВрдЯ рдФрд░ EventTarget рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

interface Event<C = any, S = any, T = any> {
  ...
  currentTarget: EventTarget<C> | null;
  srcElement: EventTarget<S> | null;
  target: EventTarget<T> | null;
  ...
}

interface EventTarget<T = any> {
  ...
}

рдореИрдВ FileReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛, рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХрд▓рд╛рдХрд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИ

const fileReader = new FileReader();
fileReader.onload = $ev => {
  console.log($ev); // type ProgressEvent
  console.log($ev.target); // type FileReader
  // console.log($ev.target.result); // editor and autocomplete doesn't show any error
  console.log(($ev.target as FileReader).result); // casting compiles fine
};
fileReader.readAsText(file);

рдХреНрдпрд╛ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? event.target рд╣рд░ рдмрд╛рд░ рдпрд╛ рдХрд┐рд╕реА рднреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЗрд╡реЗрдВрдЯ рдореЗрдВ рдмрд▓ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ @gautamkrishnar рдиреЗ рдКрдкрд░ рдХрд┐рдпрд╛ рдерд╛)ред рдпрд╣ рднреА 2014 рдХреЗ рдмрд╛рдж рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, 6 рд╡реЗрдВ рдЬрдиреНрдорджрд┐рди рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рд╣рд╛рдВ, рдпрд╣ рд╕рдВрднрд╡рддрдГ DOM, JSX, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдирдВрдмрд░ 1 рджрд┐рди рдХрд╛ рдЙрдкрджреНрд░рд╡ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рджреИрдирд┐рдХ рдЙрдкрджреНрд░рд╡ рд╣реИ - рдФрд░ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдорд┐рд▓рд┐рдпрди рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдкреВрд░реЗ рджрд┐рди рд╣реИред

рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред

Event.target рдХреЗ рд▓рд┐рдП рднреАред рдЬрдм рдмрдЪреНрдЪреЗ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдХрд┐рд╕реА рдореВрд▓ рддрддреНрд╡ рдореЗрдВ рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬрдм рдХрдИ рдмрдЪреНрдЪреЗ рд╣реЛрдВрдЧреЗред Event.target.tagName рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ classList рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ .... рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЯреИрдЧрдиреЗрдо / рдХреНрд▓рд╛рд╕рд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓реАрд╕реЗрдВрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХреНрдпреЛрдВрдХрд┐ EventTarget рдХреЛ HTMLElement рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

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

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

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

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

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

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