Typescript: рдЯреАрдПрд╕ рдХреЛ рд╢рдХреНрддрд┐ рджреЗрдиреЗ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЬреВрди 2016  ┬╖  150рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ ts рддреНрд░реБрдЯрд┐ рдХреЗ рдКрдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐

/// TS_IGNORE
let a:string = 1

рдФрд░ рдХреНрдпрд╛ рд╕рдВрдХрд▓рдХ рдиреЗ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХреА рд╣реИ ...
рдРрд╕реЗ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА: рдХреЛрдИ рднреА

рд╕рд╛рджрд░

рд╢реЙрди

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

рдмрд╕ рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ (рдХрд╛рд╕реНрдЯ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ)

const foo: string = 7 as any;

рдХреНрдпрд╛ рдЖрдк рдпрд╣реА рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ?

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

рдорд╛рдирд╛ред рдЬрд╛рд╡рд╛ рдХреЗ @SuppressWarnings рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рд▓рд╛рд▓рд╕рд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:

const typeMetadataKey = Symbol('type');

function type(name: string): PropertyDescriptor {
 return Reflect.metadata(typeMetadataKey, name);
}

рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ: Unable to resolve signature of class decorator when called as an expression. ред

рдЬрдм рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

class Person {
  @type('string')
  firstName: string;
}

рдбреЗрдХреЛрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдКрдкрд░ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдХреЛрдИ рд╕рд╣реА рджрд┐рд╢рд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

рдмрд╕ рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ (рдХрд╛рд╕реНрдЯ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ)

const foo: string = 7 as any;

рдХреНрдпрд╛ рдЖрдк рдпрд╣реА рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ?

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

  • рдЬреЗрдПрд╕ рд╕реЗ рдЯреАрдПрд╕ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ + рдХрднреА-рдХрднреА рдЖрдк рдПрдХ lib рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ ...

рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ

рддреЛ // tslint:disable рдЬреИрд╕рд╛ рдХреБрдЫ?
рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ tsc рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреЗрдХреЛрдВ рдХреЛ рдЪрд╛рд▓реВ/рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ?
_eg:_ const FooBar: string = 'rozzzly'; // tslint:disable-line camelcase

рд╡рд╣ рддреЛ рдЬрдмрд░реНрджрд╕реНрдд рд╣реЛрдЧрд╛...

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ tsc рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд▓рд┐рдВрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣реИред

"рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :)

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

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

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

"рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛" рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдкрдХреЛ "рдЗрд╕рд╕реЗ" рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рддреЛ let a:string = 1 a number рдпрд╛ рдПрдХ string ?, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ a рдХреА рдПрдХ рдФрд░ рдШреЛрд╖рдгрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд▓рдп рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬреИрд╕реЗ return {a} ; , рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ { a : number } рдпрд╛ { a: string } , рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЕрдорд╛рдиреНрдп" рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ declare module "blah" { export = any } ред рдпрд╛ declare var $: any рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

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

рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдордиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TS 2.0 рдореЗрдВ рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП;

рдмрд╕ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕ рддрд░рд╣ "рдЗрд╕реЗ рдмрдВрдж рдХрд░реЛ", рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЧреНрдпрддрд╛ (рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдХрдореА) рдПрдХ рдЕрд▓рдЧ рд╕рд╡рд╛рд▓ рд╣реИ

let x: PieInTheSky = <any> 'cake is a lie';

рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдореБрджреНрджрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдирд╣реАрдВ рд╣реИ

<any> рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рднреА рдХрд╖реНрдЯрдкреНрд░рдж рдЪреАрдЬреЛрдВ рд╕реЗ 100% рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╡реЗрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдФрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рд╕реБрдкрд░ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдлрд┐рд╕рд░реНрдЯ рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

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

_ ClassA.ts _

class A {
    constructor() {
        this.init();
    }
    protected init() {
        // does nothing by itself
    }
}

_ ClassB.ts _

class B extends A {
    constructor() {
        super();
        console.log('rest of code from B\'s constructor');
    }
    protected init() {
        console.log('this runs before the rest of code from B\'s constructor');
    }
}

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

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рд╕реБрдкрд░ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдлрд┐рд╕рд░реНрдЯ рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ ES6 рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рдмрдирд╛рдПрдВ... рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп ЁЯСг :gun: рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╣рдЯрд╛рдирд╛ рд╣реИред

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

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдБ рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкрд╕рдВрдж рдЖрдПрдЧреА:

interface Animal {
  numberOfLegs: number;
  // a gazillion more properties
}

class Dog implements Animal {
  breed: string;

  constructor(animal: Animal, breed: string) {
    Object.assign(this, animal);
    this.breed = breed;
  }
}

рдЕрднреА ts рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ:

[ts] рдХреНрд▓рд╛рд╕ 'рдбреЙрдЧ' рдиреЗ 'рдПрдирд┐рдорд▓' рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛
рд╕рдВрдкрддреНрддрд┐ 'рдирдВрдмрд░рдСрдлрд▓реЗрдЧреНрд╕' рдЯрд╛рдЗрдк 'рдбреЙрдЧ' рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ

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

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

@aluanhaddad рд╣рд╛рдБ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ

рдмрд╕ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕+рдХреНрд▓рд╛рд╕ рдХреЙрдореНрдмреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

interface Animal {
  numberOfLegs: number;
  // a gazillion more properties
}

interface Dog extends Animal {
}

class Dog  {
  breed: string;

  constructor(animal: Animal, breed: string) {
    Object.assign(this, animal);
    this.breed = breed;
  }
}

Thx, @mhegazy , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рддреНрд░реБрдЯрд┐ <any> рдПрдб рджреВрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдореИрдВ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдмрд╛рдЗрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ https://github.com/Microsoft/TypeScript/issues/3508 рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдиреНрдпрдерд╛ рдкреНрд░рддреНрдпреЗрдХ :: рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ TS1128: Declaration or statement expected )

рдореИрдВ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдмрд╛рдЗрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

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

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

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рднреА рд╣реИ, рдореИрдВ рдкреНрд░реА-рдИрдПрд╕ 6 рдореЙрдбреНрдпреВрд▓-рдП-рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдРрдк рдХреЛ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдРрдк рд╣реИред

рдореИрдВ рдЗрд╕рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдРрдк * рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдк-рддрддреНрд╡реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЬреЛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ "рдиреЗрдорд╕реНрдкреЗрд╕ 'рдРрдк' рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛" рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдПрдХ рджреНрд░рд╡реНрдпрдорд╛рди рд╣реИред

рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдПрдХ GlobalProxy.ts рдкрд░ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ //TS-NO-WARNINGS рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ ...

TS рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рдЖрдкрдХреЛ рдЬреЛ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ zeeshanjan82 рдХреНрдпреЛрдВ рди --allowJs рдФрд░ рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ? рдЙрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреАред рдореЙрдбреНрдпреВрд▓ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд░рд┐рд╡реЗрд╢ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдШреЛрд╖рдгрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ
_globals.d.ts_

declare module '*';

рддреНрд░реБрдЯрд┐ рджрдорди рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдкрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ isoWeek рдХреЛ startOf рдФрд░ endOf рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдПрдирдо рдореЗрдВ рд╡реИрдз рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдПред рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреБрди: рдХрд╛рдо рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ TS рдлреЗрдВрдХрдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг isoWeek рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рддреЛ рдЗрд╕ рд╕рдордп рдПрдХ рдЪрдЯреНрдЯрд╛рди рдФрд░ рдПрдХ рдХрдард┐рди рдЬрдЧрд╣ рдХреЗ рдмреАрдЪ рдлрдВрд╕ рдЧрдпрд╛ред

рдЖрдк рдмрд╕ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдХрд╣реЛ:

// ./overrides/moment.d.ts
declare module "moment";
// tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "baseUrl": ".",
        "paths": {
            "moment": ["overrides/moment.d.ts"]  // override definition for moment
        }
    }
}

рдЕрдм рд╕рдВрдХрд▓рдХ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреА рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐ override/moment.d.ts рд╡рд┐рд░реБрджреНрдз рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдкрд▓ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ рдЗрдЪреНрдЫрд╛ рджреЛрдиреЛрдВ рдХреА рдХрдореА рд╣реИ;)

рдореЗрд░реЗ рдкрд╛рд╕ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ рдЗрдЪреНрдЫрд╛ рджреЛрдиреЛрдВ рдХреА рдХрдореА рд╣реИ;)

рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИред рдмрд╕ declare module "moment"; рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП declare var $: any рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

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

declare module "moment"; рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рдХреНрд╖рдг-рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП any s рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреЛрдб рдореЗрдВ рдмреНрд▓реАрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрдИ рд╕реНрдЯреИрдЯрд┐рдХ рдЪреЗрдХ рднреА рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдПрдХрд▓ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдПрдирдо рдореВрд▓реНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рдПрдХ рднрд╛рд░реА рдХреАрдордд рд╣реИред

@aluanhaddad рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЦреБрд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рджреВрд╕рд░реЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреЗрд╢ рдХрд┐рдП (рдФрд░ рдЕрднреА рднреА isoWeek рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛), рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реБрдЖ .

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

рдореЗрд░реЗ рдкрд╛рд╕ рдиреЛрдб рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдиреЗрдЯ, рдиреЛрдб 6.9 рдПрд▓рдЯреАрдПрд╕) рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

server = net.createServer({ pauseOnConnect: true }, function(connection) { ... }) 
// [ts] severity: 'Error'
message: 'Argument of type '{ pauseOnConnect: boolean; }' is not assignable to parameter of type '{ allowHalfOpen?: boolean; }'.
  Object literal may only specify known properties, and 'pauseOnConnect' does not exist in type '{ allowHalfOpen?: boolean; }'.'

рдФрд░ ioredis рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рднреА:

var redis = new Redis(CONFIG.redis); 
// [ts] severity: 'Error'
message: 'Only a void function can be called with the 'new' keyword.'

рдЬреИрд╕рд╛ рдХрд┐ @yortus рдФрд░ @adamreisnz рдиреЗ рдмрддрд╛рдпрд╛, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЛ declare module "x"; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ TS рд▓рд╛рднреЛрдВ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рдирд╛ рд╣реИ рддреЛ рдЖрдк TS рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ?

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

рдЦреИрд░, рдЬрдм рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:

if (typeof Symbol === "function" && Symbol.match) {
  // ...
}

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрд╢рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ Cannot find name 'Symbol' рдЕрдЧрд░ target рд╣реИ es5 , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХреА рдереАред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдЦреНрдд рдЬрд░реВрд░рдд рд╣реИред

declare var Symbol: any;

@ gdh1995 @mhegazy рдпрд╛ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ lib рдзреНрд╡рдЬ рдХреЛ es2015 ред

@mhegazy рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

declare var Symbol: {
  (description?: anyNotSymbol): symbol;
  readonly match: symbol;
};

@DanielRosenwasser рд╣рд╛рд▓рд╛рдВрдХрд┐ es2015 рдЗрди рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ es5 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдлрд┐рд░ Symbol рдХреЛ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдореБрдЭреЗ рддрдм рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджреЗрддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ typeof Symbol === "function" рд▓рд┐рдЦрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рд╕рд▓рд╛рд╣?

рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдорд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдЖрдПрдЧрд╛, рд╡рд╣ рд╣реИ:

// Test.ts

// Component to test
import {ComponentToTest} from './ComponentToTest';

// Dependency of ComponentToTest to mock
import {Dependency} from './Dependency';

// Mock to replace it with
import {MockedDependency} from './MockedDependency';

Dependency = MockedDependency;

рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдП рдЬрд╛рдиреЗ рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕реНрдкрд╖реНрдЯ "'рдирд┐рд░реНрднрд░рддрд╛' рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЪрд░ рдирд╣реАрдВ рд╣реИред" рддреНрд░реБрдЯрд┐ред

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

рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдП рдЬрд╛рдиреЗ рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕реНрдкрд╖реНрдЯ "'рдирд┐рд░реНрднрд░рддрд╛' рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЪрд░ рдирд╣реАрдВ рд╣реИред" рддреНрд░реБрдЯрд┐ред

рдпрд╣ ES6 рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рд╕рдордп рдЬрдм рдЗрдВрдЬрди рдореВрд▓ рд░реВрдк рд╕реЗ ES6 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдЕрдкрдирд╛ ComponentToTest Dependency рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реБрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Dependency рдХреЗ рдореВрд▓реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ComponentToTest ред

рдпрд╣ ES6 рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рд╕рдордп рдЬрдм рдЗрдВрдЬрди рдореВрд▓ рд░реВрдк рд╕реЗ ES6 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд╣ рдХрд╛рдлреА рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдЕрдкрдиреЗ ComponentToTest рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @mhegazy

рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЪреЗрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ:

function isValidId(s: string): boolean {}

рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рд╕реА рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ false рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

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

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣реВрдВрдЧрд╛

@rpadovani рдмрд╕ any :

expect(isValidId(78 as any)).toBe(false);

рдореИрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ foo(bar: any, baz: any) рдХреЛ рдврд╛рдВрдЪреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди foo рдХреЗ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдмрд╛рд░ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ foo рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ, рдмрд╛рд░ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@benjaminabbitt рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ foo (_bar: any, baz: any) рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: "_" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреЛрдбрд╝реЗрдВ: рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб/рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

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

рддреГрддреАрдп рдкрдХреНрд╖ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

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

рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдПрдирдкреАрдПрдо рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдФрд░ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?

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

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдкрд░ /* ts:disable */ рдЯрд┐рдкреНрдкрдгреА рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдм рдХреЛрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рднрд▓реЗ рд╣реА рдЙрд╕рдиреЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд▓рд╛рд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддреГрддреАрдп рдкрдХреНрд╖ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ?

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд▓рд╛рд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддреГрддреАрдп рдкрдХреНрд╖ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ?

рдЙрдиреНрд╣реЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рди рдХрд░реЗрдВред .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ .d.ts рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ .d.ts рдлрд╛рдЗрд▓реЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣реИрдВред

.d.ts рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддреА рд╣реИ:

declare var $: any;

рдлрд┐рд░ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреИрд╕рд╛ рдЖрдк рдлрд┐рдЯ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рддреЗрдВ рдмрдврд╝рддреА рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЗрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдХреНрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ?

рдЕрдЧрд░ рдореИрдВ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЗрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдХреНрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╡рд╛рд▓ рд╕рдордЭрддрд╛ рд╣реВрдВред рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ, рдмрд╛рд╣рд░реА рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдкрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдмрджрд▓рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ TS рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ .d.ts рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдХрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, any рдХреЗ рд╕рд╛рде рдлрд┐рд░ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛрдбрд╝реЗрдВред

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

рдЖрдкрдХреЛ .js рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЕрдкрдиреЗ рд░реЗрдкреЛ рдореЗрдВ react-0.12.0.js рдХрдорд┐рдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд╕реАрдбреАрдПрди рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред рдорд╛рди рд▓реЗрдВ рдХрд┐ @types/react рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдИ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдЗрд╕реЗ declarations.d.ts рдФрд░ рдЬреЛрдбрд╝реЗрдВ:

declare module "react"; // just saying the module is of type any

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

рддреЛ рдЕрдЧрд░ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЬреЛ рдПрдирдкреАрдПрдо/рд╕реАрдбреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ) рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

рд╡рд┐рдХрд▓реНрдк 1 : рдореВрд▓ рдХреЛрдб рдХреЛ .js рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП .d.ts рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдП рд░рдЦреЗрдВред

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

рд╡рд┐рдХрд▓реНрдк 2 : рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВред

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ "library.js" рдФрд░ "website.js" , рдЖрдк "website.js" рдХреЛ "website.ts" рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рдмрд╕ tsc website.ts --outFile website.js рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЕрдм рд╣рдо рд╡рд╛рдкрд╕ рд╡рд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдм рджреЛ .js рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред рдЗрд╕рд▓рд┐рдП рдпрд╣ рди рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рд╣реИ.. рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрдорд╛рдг рдХрджрдо рд╣реИред

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

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ @RyanCavanaugh рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЛ рдирд╣рд╛рдиреЗ рдХреЗ рдкрд╛рдиреА рдХреЗ рд╕рд╛рде рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡реЗрд╢ рдШреЛрд╖рдгрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИред
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ tsconfig.json рдХреЗ рд▓рд┐рдП рдкрде рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
"paths": { "js-xlsx": ["./xlsx.d.ts"] }
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реВрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред
рдореИрдВрдиреЗ 'fs', 'fs-extra' рдФрд░ 'js-xlsx' рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЙрди рд╕рднреА рдиреЗ рдореЗрд░реЗ рдкрд░рд┐рд╡реЗрд╢ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ, рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдпрд╛ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ declare var $: any;
@mhegazy

рдЖрдкрдХреЛ .js рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЕрдкрдиреЗ рд░реЗрдкреЛ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-0.12.0.js рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд╕реАрдбреАрдПрди рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред рдорд╛рди рд▓реЗрдВ рдХрд┐ @ рдкреНрд░рдХрд╛рд░/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдИ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ рдШреЛрд╖рдгрд╛рдПрдБ.d.ts рдХрд╣реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ:

рдореЙрдбреНрдпреВрд▓ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ; // рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ
рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдирд╛рдордХ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдХрд┐рд╕реА рднреА .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡реИрд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдлрдПрд╕-рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬреИрд╕реЗ @ рдкреНрд░рдХрд╛рд░/рдПрдлрдПрд╕-рдЕрддрд┐рд░рд┐рдХреНрдд рдФрд░ рдЬреЗрдПрд╕-рдПрдХреНрд╕рдПрд▓рдПрд╕рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреАрдПрд╕-рдПрдХреНрд╕рдПрд▓рдПрд╕рдПрдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЪрд╛рд▓ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ :(

рд╡реИрд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдлрдПрд╕-рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬреИрд╕реЗ @ рдкреНрд░рдХрд╛рд░/рдПрдлрдПрд╕-рдЕрддрд┐рд░рд┐рдХреНрдд рдФрд░ рдЬреЗрдПрд╕-рдПрдХреНрд╕рдПрд▓рдПрд╕рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреАрдПрд╕-рдПрдХреНрд╕рдПрд▓рдПрд╕рдПрдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЪрд╛рд▓ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ :(

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

c:\test\9448>npm install @types/fs-extra
[email protected] c:\test\9448
`-- @types/[email protected]
  `-- @types/[email protected]

npm WARN [email protected] No description
npm WARN [email protected] No repository field.

c:\test\9448>type a.ts
import { rmdir } from "fs-extra";
rmdir("c:/test");

c:\test\9448>type tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5"
    }
}
c:\test\9448>tsc --v
Version 2.2.0

c:\test\9448>tsc

c:\test\9448>echo %ERRORLEVEL%
0

рд╣рд╛рдБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рджрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрдмрд╛ рд╕рдХрд╛ред рд╡реИрд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ https://github.com/AngularClass/angular2-webpack-starter рд╣реИ , рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░

рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдЧрд▓рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ,

error TS1005: '{' expected.

рдЗрд╕ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ JSX:

<motor-node ref      = 'menu'
    absoluteSize     = `0, ${this.MENU_BAR_HEIGHT}, 0`
    >
    {menu}
</motor-node>,

рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ { ред рдпрд╣ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рддрдм рддрдХ, рдореИрдВ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХреЛ рджрдмрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

рдиреЗ рдХрд╣рд╛ рдХрд┐ред JSX рдпреБрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░:

JSXAttributeValue:

"JSXDoubleStringCharactersopt"
' JSXSingleStringCharactersopt '
{рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди}
рдЬреЗрдПрд╕рдПрдХреНрд╕рдПрд▓рд┐рдореЗрдВрдЯ

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рд╣реА рд╣реИ рдФрд░ рдПрдХ JSX рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп absolteSize = {...} рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрд╣ рддреНрд░реБрдЯрд┐ рдПрдХ рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐ рд╣реИ

рд╣рд╛рдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЙрдЯрдкреБрдЯ absoluteSize: "0, " + this.MENU_BAR_HEIGHT + ", 0" , рдЬреЛ рдореБрдЭреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреАрдЬреЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред

рдУрд╣ред рдорд╛рдл рдХрд░реЛ рдлрд┐рд░ред рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдИред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЦрд╛рдореЛрд╢ рд╣реЛ рдЬрд╛рдПред

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

TS 2.1 (VS2017 RC) рдореЗрдВ рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА JS рдлрд╛рдЗрд▓реЛрдВ (/рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмреИрдареЗ) рдлрд╝реЛрд▓реНрдбрд░-рдЬреИрд╕реЗ TS7027 рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рджрдорди рдлрд╝рд╛рдЗрд▓ (рд╕реА # GlobalSupressions.cs рдХреЗ рд╕рдорд╛рди) рдореЗрдВ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

TS 2.1 (VS2017 RC) рдореЗрдВ рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА JS рдлрд╛рдЗрд▓реЛрдВ (/рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмреИрдареЗ) рдлрд╝реЛрд▓реНрдбрд░-рдЬреИрд╕реЗ TS7027 рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред

рдЕрдЧрдореНрдп рдХреЛрдб (TS 7027) рдХреЗ рд▓рд┐рдП, --allowUnreachableCode рд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЗрд╕реЗ рдЕрдкрдиреЗ tsconfig.json рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ "рдореЗрд░реЗ рдХреЛрдб" рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ!

--alowJs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЖрдкрдХрд╛ рдХреЛрдб рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдЪреВрд╕ рд▓реЗрдЧрд╛, рдЗрд╕реЗ рд╕реБрдЭрд╛рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛, рдпрджрд┐ рдЖрдк --outFile рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ .. рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ .js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред рдпрджрд┐ рдпрд╣ "рд▓рд╛рдЗрдмреНрд░реЗрд░реА" рдХреЛрдб рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ .d.ts рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдордиреЗ --allowJs - VS2015 рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ jquery.js, React.js рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмреИрдареА рд╣реБрдИ рдирд╣реАрдВ рд╣реИрдВ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ html рдкреГрд╖реНрда рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИрдВ)

let { value } = browser.waitForPromise(() => {
    return browser.executeAsync(function (method, name, resolve) {
        require(['patron.Locator/patron.Locator.Manager'], function (locator) {
            resolve(result);
        });
    }, method, name);
});

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ /* ts-disable */ /* ts-enable */ (рдПрд╕реНрд▓рд┐рдВрдЯ-рд▓рд╛рдЗрдХ) рдЬреИрд╕реЗ рдирдП рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

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

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдкреВрд░рд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ?

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдкреВрд░рд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ?

рдореИрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдпрд╣ рдПрдХ .ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ ..

рднрд▓реЗ рд╣реА, рдЗрд╕ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ declare var browser: any; рдФрд░ рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рджреЗрдЦреЗрдВред

рдпрджрд┐ рдпрд╣ рдПрдХ .ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ ..

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЛрдб рдиреЗ IE6 рдФрд░ рдЕрдиреНрдп рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдмрд┐рдирд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Node.js CommonJS рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ require рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреЛрд╕реНрдЯ- рдФрд░ рдкреВрд░реНрд╡-рд╕рдВрд╢реЛрдзрди рдХреЗ рдЙрд╕ рдХреЛрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдореЗрд░реЗ рдФрд░ рдореЗрд░реА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рднрд▓реЗ рд╣реА, рдЗрд╕ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ var рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХреЛрдИ рднреА; рдФрд░ рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рджреЗрдЦреЗрдВред

рджрд░рдЕрд╕рд▓, рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред browser.execute рд╡рд┐рдзрд┐ рдХреА рдЕрдкрдиреА рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рднреА рд╣реИред

рдЕрдм рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрджреНрджрд╛ рдХреНрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ?

рдореЗрд░рд╛ рдХреЛрдб рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдиреЛрдб рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ред рджреВрд╕рд░реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рд╣реИрдВред

img-2017-03-07-02-10-28

let { value } = browser.waitForPromise(() => { // node
    return browser.executeAsync( // node
            function (method, name, resolve) { // browser
        require(['patron.Locator/patron.Locator.Manager'], function (locator) {  // browser
            resolve(result);  // browser
        });  // browser
    }, method, name); 
});

рдпрд╣рд╛рдБ browser.executeAsync рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

browser.executeAsync  = (...args) => {
   let script = args.shift();

   RPC.Selenium('/session/:sessionId/execute', {
         script: `return (${script}).apply(null, arguments)`, 
         args
    });
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреНрдпрд╛ рд╣реИ?

рдорд╛рдирдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ:

TS2345: Argument of type 'string[]' is not assignable to parameter string
TS7006: Parameter 'error' implicitly has an 'any' type
TS7006: Parameter 'attach' implicitly has an 'any' type
TS7006: Parameter 'message' implicitly has an 'any' type
TS7006: Parameter 'model' implicitly has an 'any' type

рдФрд░ рдЗрд╕реА рддрд░рд╣...

require рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

declare function require(v: string[]): any;

рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, executeAsync рд╡рд┐рдзрд┐ рдореЗрдВ рддреГрддреАрдп-рдкрдХреНрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдРрд╕реЗ require s рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рднрд┐рдиреНрдирддрд╛рдПрдВ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рд░реНрдп рд╣реИред
рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЬрдм рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдореБрдЭреЗ рдХреБрдЫ рдХреЛрдб рдмрд╛рд╣рд░ рдХрд░рдиреЗ рджреЗрдВ :)

рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ declare function require(v: string[]): any; рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:

// module a.ts
export var ...

declare function require(v: string[], callback: Function);

let { value } = browser.waitForPromise(() => { 
    return browser.executeAsync( 
        function (method, name, resolve) { // browser
            require(['patron.Locator/patron.Locator.Manager'], function (locator) {  // OK
                resolve(result);  
            });  
        }, method, name);
});

рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЖрдк рдХреЗрд╡рд▓ any рдкрд░ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

let { value } = browser.waitForPromise(() => { // node
    return browser.executeAsync( // node
        function (method, name, resolve) { // browser
            (<any>require)(['patron.Locator/patron.Locator.Manager'], function (locator) {  // browser
                resolve(result);  // browser
            });  // browser
        }, method, name);
});

рдпрд╣ рд╕рдорд╛рди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдЬреА (рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ) рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рджреЛ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:

abstract class IParent {
  static fromConfig(config: ParentConfig): IParent {
    // actual code is 20 lines long, not this simple
    // this throws "Cannot create an instance of the abstract class 'Parent'"
    return new this().applyConfiguration(config);
┬а }
  abstract method1(): void;
  ...
}

export class FirstChild extends IParent {
  specificMethodForFirstChild() {┬а... }
  method1() { ... }
  ...
}

export class SecondChild extends IParent {
  specificMethodForSecondChild();
  method1() { ... }
  ...
}

рдЙрдкрдпреЛрдЧ:

let first = FirstChild.fromConfig({ ... });
let second = SecondChild.fromConfig({ ... });

// this runs successfully:
(first as FirstChild).specificMethodForFirstChild();
(second as SecondChild).specificMethodForSecondChild();

рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ fromConfig() рдореБрдЭреЗ "рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ 'рдорд╛рддрд╛-рдкрд┐рддрд╛' рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдХреЛрдб

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

рд╕рдВрдХрд▓рдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЖрдзрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдЖрдзрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред new this() рд╕реЗ рдпрд╣ рдзрд╛рд░рдгрд╛ рдмрдирддреА рд╣реИ рдХрд┐ рд╕рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛; рдФрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рддреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ new (<any>this)(x, y);

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

рдХреНрдпрд╛ Module ... was resolved to ..., but '--allowJs' is not set рдХреЛ рд╢рд╛рдВрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдЯреАрдПрд╕рд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЪреБрдк рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

'рдореЙрдбреНрдпреВрд▓ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ "someModule";' рдЖрдкрдХреА .d.ts рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВред

рдпрд╛ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ @types рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛:

const Button = (
  content: contentTypes,
  action: React.EventHandler<React.MouseEvent<HTMLDivElement>>,
  disabled: boolean
): JSX.Element => (
  <div className={`Button disabled-${disabled}`} onTouchStart='' onClick={ !disabled ? action : undefined } >
    { content }
    <div className='background'></div>
  </div>
);

рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрди рдЯрдЪрд╕реНрдЯрд╛рд░реНрдЯ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рддреНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, onTouchStart='' рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдореЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдкрд░реНрд╢ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЯреВрдЯреЗ рд╣реБрдП рд╕реАрдПрд╕рдПрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдпрд╛ рдХреБрдЫ JSX рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдЪрд╛рд╣реВрдВрдЧрд╛ред

onTouchStart={<any>''}

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
error
рдпрд╣ tsx рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рддрд╣рдд рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ

onTouchStart={'' as any} , рдмрд▓реНрдХрд┐ (рднреВрд▓ рдЧрдП JSX рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрднрд┐рдХрдерди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)

@RyanCavanaugh рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╡реИрдз рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛? рдореИрдВ рдПрдХ рдиреЛрдб рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдЧрд░ рдХреЛрдбрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡реИрдЧрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрд╡реИрдЧрд░ рдЕрдиреБрдмрдВрдз рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреНрд▓реЙрдХ рд╣реИрдВ:

let contentTypeHeader: Dictionary<string>;
if (contentTypeHeader) {
    fetchOptions.headers = contentTypeHeader;
}

рдпрджрд┐ strictNullChecks рдЪрд╛рд▓реВ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реИрдЧ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЬреЛ рдмреЗрдХрд╛рд░ рд╣реИред рдореИрдВ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ <tsc strictNullChecks=false /> рдЬреИрд╕рд╛ рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реВрдВрдЧрд╛ (

рдХреНрдпрд╛ рдпрд╣ рд╕рдЦреНрдд рдирд▓рдЪреЗрдХ-рдЕрдиреБрдкрд╛рд▓рди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдЧрд░ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛?

@mhegazy рдЬрд╝рд░реВрд░ - рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдб-рдЬрдирд░реЗрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ)ред рддреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЗ рдорд╛рдирдХреЛрдВ рддрдХ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╡реЗ рд╣реИрдВ :) рдЖрдк рдЕрдкрдиреЗ рдСрдЯреЛ-рдЬреЗрдирд░реЗрд╢рди рдЯреВрд▓ рд╕реЗ рдЬреЛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрдкрдХреЗ рд╕рдВрдХрд▓рди рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЯреВрд▓ --strictNullChecks рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдЧреИрд░-рднреНрд░рд╛рдордХ рдкреНрд░рдХрд╛рд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реИред
рдЪреЗрдХ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рд┐рд░реНрдл рдлрд╛рдпрд░ рдЕрд▓рд╛рд░реНрдо рдХреЛ рдордлрд▓ рдХрд░рдирд╛ рд╣реИред рдореБрджреНрджрд╛ рдЕрд▓рд╛рд░реНрдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЖрдЧ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИред

@mhegazy рдореИрдВ рдХреЛрдб рдореЗрдВ рдлрд╛рдпрд░ рдЕрд▓рд╛рд░реНрдо рдХреЛ

рдХреИрд╕реЗ рдПрдХ рдХрдо рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд╛рдиреАрдп рд╣реИ? рдЗрд╕рд╕реЗ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд╣рд╛рдВ рдореБрдЭреЗ tsconfig рдореЗрдВ noUnusedLocals рдмрдВрдж рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - рдЬреЛ рдореИрдВ рдЕрднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреИрд╕реЗ рдПрдХ рдХрдо рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд╛рдиреАрдп рд╣реИ? рдЗрд╕рд╕реЗ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд╣рд╛рдВ рдореБрдЭреЗ tsconfig рдореЗрдВ noUnusedLocals рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдореИрдВ рдЕрднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрджрд┐ рдЖрдк рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ .js рдореЗрдВ рдПрдХ рд╕рд╛рдереА .d.ts рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рдЖрдк рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рд╕рдВрдХрд▓рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рдЬреЗрдПрд╕ рдорд┐рд╢реНрд░рдг рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

_.mixin(){sortFunciton: SortFunc(), OtherChainFunc: OtherFunction()}

....

someVal = _.chain(someArray)
.рд╕реЙрд░реНрдЯрдлрдВрдХреНрд╢рди ()
.otherChainFunc()
редрдореВрд▓реНрдп();

...

рдПрдХ рдмрд╣реБрдд рдЖрд╕рд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрдм рдЖрдк рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЛрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдХреЗ рд▓рд┐рдП @HostListener() рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ:

@HostListener('click', ['$event'])
onClick(event: MouseEvent) {
    // Code here...
}

рдЕрдЧрд░ рдореИрдВ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ noUnusedLocals , рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реИ:

ERROR in ./src (20,13): 'onClick' is declared but never used.

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореИрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@ рдЬреЗрд░реЗрдореА рдХрд╛рд░реНрд▓рд╕реНрдЯрди

_.mixin(){sortFunciton: sortFunc(), otherChainFunc: otherFunction()}

рдЕрдорд╛рдиреНрдп рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

@leocaseiro рдЗрд╕реЗ рдирд┐рдЬреА рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ onClick рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдгреАрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдо рдирд┐рдЬреА рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░реЗрдВред рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЛрдгреАрдп рдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗ рд░рд╣реЗ рд╣реИрдВред

рд╣рд╛рдп @ jmlopez-рд░реЙрдб, рддреБрдо рд╕рд╣реА рд╣реЛред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЬрдирддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЕрдм рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ! рдореИрдВ рд╕рдЪрдореБрдЪ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

@leocaseiro public рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╢реНрдпрддрд╛ рд╕реНрддрд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

// do-as-i-tell-you-start
const factory = () => {
  const _this = [];
  let _value;
  Object.defineProperties(_this, {

    // Error: Property 'getset' does not exist on type 'any[]'.
    // true at at creation but not when used тАУ don't MOM me!
    'method1': { value(){ return _this.getset; } },   

    // Works with property strings тАУ I don't want this
    'method2': { value(){ return _this['getset']; } }, 

    'getset': { get(){ return _value; }, set(value){ _value = value } },
  });
  return _this;
}

рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╕рдЪ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореБрдЭреЗ рдорд╛рдБ рдордд рдХрд░реЛ!

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рдХрд░реЗрдВ, рдХрд┐рд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП?

рдпрд╣ ES5 => ES6 (рдмреЗрдмреЗрд▓ рдпрд╛ TS) => TS рд╕реЗ рдПрдХ рдЯреАрдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рдпрд╣ рд╕рдм рдорд╣рд┐рдорд╛ рд╣реИ - рдмреЗрдмреА рд╕реНрдЯреЗрдкреНрд╕ рдореЗрдВред

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ TS, JS рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрд╕ рд╕реНрддрд░ рдкрд░ рдХрджрдо рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рд╣реИрдВред
рдореЗрд░реА рд╢рд┐рдХрд╛рдпрдд рдХрд╛ рдХрд╛рд░рдг рдбрдореА рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП _does
ES5_ рдХрд╛ рдЙрддреНрдкрд╛рджрди рди рдХрд░реЗрдВред IMO рдкрд╛рд╕рд┐рдВрдЧ рд▓рд╛рдЗрдирд┐рдВрдЧ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рддрдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐ рдкрд░ рдХреЛрдИ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧрд╛ред рддреЛ рдпрд╣ ES5 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдирд╣реАрдВ рдерд╛ - рдмреИрдмреЗрд▓ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ - рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛

tsc рдХреЛ рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, noEmitOnError рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВред

рдпрджрд┐ рдЖрдк ts-loader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ transpileOnly рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ред

@trusktr рдзрдиреНрдпрд╡рд╛рдж - рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ :-)

рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдкреАрдврд╝реА рдХреЛ рдЯреВрд▓рд┐рдВрдЧ

рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рдПрдХ (рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп - рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реЗ рдЖрддрд╛ рд╣реИ) рд╕реЗрдЯрдЕрдк рд╣реИ рдЬреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреНрд░реИрд╢ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ рдЬрдм рдкреВрд░реА рдЯреАрдо рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд░реНрдорд╛рдг "рдХрд╛рдо" рдХрд░ рд░рд╣рд╛ рд╣реИ? рдЗрд╕реА рддрд░рд╣ рдпрджрд┐ tsc рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рддреЛ рдСрдЯреЛ-рд░реАрдлреНрд░реЗрд╢ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдкреНрд▓рдЧрдЗрди рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЧрд▓рдд рд╣реИ [рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЧрд▓рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ] рддреЛ рдпрд╣ рд░реАрдлреНрд░реЗрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред

tsc рдореЗрдВ рдмрдЧ рд╣реЛрдиреЗ рдкрд░ рдПрд░рд░ рдХреЛ рджрдмрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

interface A {
  isEmpty(x: any[] | string | object): boolean;
}

const a: A = <A>{};
a.isEmpty({a: 1});

рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдЯреАрдПрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ (рдЧрд▓рдд рд▓рд╛рдЗрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ)

рджреНрд╡рд╛рд░рд╛

a.isEmptyObject ({рдП: 1});

рддреБрдореНрд╣рд╛рд░рд╛ рдорддрд▓рдм рд╣реИ

a.isEmpty({a: 1});

?

рдУрд╣ рд╣рд╛рдВред рдЧрд▓рдд рд▓рд╛рдЗрди рдХреЙрдкреА рдХреА рдЧрдИ: /ред

tsc рдореЗрдВ рдмрдЧ рд╣реЛрдиреЗ рдкрд░ рдПрд░рд░ рдХреЛ рджрдмрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣рд░ рдХрд╛рд░рдг tsc рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдЧреА рдЬрдм рдЙрд╕рдореЗрдВ рдХреЛрдИ рдмрдЧ рд╣реЛ рдЬреЛ рдЗрд╕реЗ рдХреНрд░реИрд╢ рдХрд░ рджреЗред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдпрд╛рдд рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import * as reducers from "./**/reducer.ts"

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

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

рд╕рдВрдХрд▓рдХ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рднреАрддрд░ рдПрдХ .d.ts рдореЗрдВ @lukescott:

declare module './**/reducer' {
  export = {
    [reducer: string]: () => void; /* or whatever */
  };
}

рдпрд╣ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЗрд╕рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

const req = https.request({
        host: 'www.google.com',
        method:'GET',
        path:'/',
        port: 443,
}, (res) => { 
    console.log(res.connection.getPeerCertificate());
});

getPeerCertificate рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб https ( рдпрд╣ рднреА ) рдореЗрдВ рджреЛрд╖рдкреВрд░реНрдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

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

console.log(res.connection.getPeerCertificate()); //ts:disable-line

@trusktr
рдЙрдлрд╝ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдареЗрд╕ рдХреЛрдб рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЬреЛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЙрд╕рдХрд╛ рдПрдХ рдЬреЗрдПрд╕ рдкреНрд▓рдВрдХ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА ts рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреЛрдб рдХреА рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╕рдВрднрд╡рддрдГ рдЕрд╢рдХреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП ! рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╣реЛрдЧреАред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:

/*ts-errors-disable*/ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рдФрд░ /*ts-errors-enable*/ рдЕрдВрдд рддрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рджреЗрд╡реЛрдВ рдХреЛ рд╕рднреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреАрдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@benfrain рдареАрдХ рд╣реИ, рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ ( npm install --save-dev @types/mylibrary ) рд╕рдВрдмрдВрдзрд┐рдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрд╛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ any рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреБрдж рдХреА _.d.ts_ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ /рдореБрдЦреНрдп рд╡рд░реНрдЧ рдкреНрд░рдердо:

// mylibrary.d.ts
declare module "mylibrary" {
    let mylibrary: any;
    export = mylibrary;
}
// main.ts
import mylibrary = require("mylibrary");
...

рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИред рдкрд╣рд▓рд╛ рдХреЛрдб, рдФрд░ рддреНрд░реБрдЯрд┐ рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ:

import {Directive, ElementRef, Input, OnChanges, SimpleChange} from '@angular/core'

@Directive({
  selector: '[blankAttr]',
})
export class BlankAttr implements OnChanges {
  @Input('blankAttr') private attrName: string // <--- TS Error: unused variable

  constructor(private el: ElementRef) {}

  public ngOnChanges(changes: {[key: string]: SimpleChange}): void {
    const change: any = changes.attrName 
    const prevValue: any = change.previousValue

    if (prevValue) {
      this.el.nativeElement.removeAttribute(prevValue)
    }
    this.el.nativeElement.setAttribute(change.currentValue, '')
  }
}

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ @Input рдбреЗрдХреЛрд░реЗрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдореВрд▓реНрдп рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рд╡рд╣ рдмрджрд▓рддрд╛ рд╣реИред рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореИрдВ рдкрд┐рдЫрд▓рд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ // ts-ignore рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╛ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?

@uglow attrName рдирд┐рдЬреА рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдПрдВрдЧреБрд▓рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@ jmlopez-rod рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИред TS рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рд╣реИред

рдореИрдВ рдЯреАрдПрд╕ 2.4.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ:
screen shot 2017-07-26 at 9 53 13 am

рдмрд╛рдж рдореЗрдВ:
screen shot 2017-07-26 at 9 53 39 am

рдореИрдВ 2.3.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ 2.4.1 рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж

рдЗрд╕рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдПрдХрд▓ .js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рд╛рд░ рджреЗрдЦреЗрдВ ред рдореИрдВ рдЕрдкрдиреА .js рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ TS рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдФрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ:

A 'return' statement can only be used within a function body.

рдПрдХ рдирдпрд╛ SO рдкреНрд░рд╢реНрди рдЬрд┐рд╕реЗ noUnusedLocals рддреНрд░реБрдЯрд┐ рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
https://stackoverflow.com/questions/45519476/is-it-a-typescript-antipattern-to-dynamically-call-a-member-function-stored-in-a

@mhegazy рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдорд╛рд░рд╛ рд╣реИред

рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (рд╕рдВрдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣ рдШреЛрд╖рдгрд╛ рдореЛрдб рдорд╛рдирддрд╛ рд╣реИ):

  • рд╡рд░реНрдЧ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ (рд╡рд░реНрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдЕрдВрджрд░ рд╣реВрдВ - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдЬ рдирд╣реАрдВ рд╣реИред
  • рдареАрдХ рд╣реИ, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдореИрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдШреЛрд╖рдгрд╛ рдмрдирд╛ рджреВрдБрдЧрд╛
  • рдХреЛрдИ рдкрд╛рд╕рд╛ рдирд╣реАрдВ, рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЕрдм рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдирд╛рдо рд╣реИ
  • рдареАрдХ рд╣реИ, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдореИрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреВрдБрдЧрд╛
  • рдХреЛрдИ рдкрд╛рд╕рд╛ рдирд╣реАрдВ, Return type of public method from exported class has or is using private name
  • ...?

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

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

рдЬрдм рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдкрд╣реБрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ (рдЬрд╣рд╛рдВ рдореБрдЭреЗ "рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рддреНрд░реБрдЯрд┐ рдкрд░ рдЪреБрдк рд░рд╣реЗрдВ") рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ
if (false){ ...complicated debug code that I dont want to delete/forget... }

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

@polyglotinc if (!!false) {

@RyanCavanaugh рдареАрдХ рд╣реИ, рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, (!true) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдореИрдВрдиреЗ рдЙрдирдХреЛ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ _ (рдПрдХ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рдХ-рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ) _ рдиреЗ рдирд┐рд░рдВрддрд░/рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдзрд┐рдХ рдХреНрд░реЗрдбрд┐рдЯ рджрд┐рдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдврд╣ рд░рд╣реА рд╣реИ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдпрд╣ if (false) рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡реНрдпрд╕реНрдд рдирд┐рдХрд╛рдп рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ if (!true) рд╡рд╣реА рдмрд╛рдд рдереА!

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

screen shot 2017-08-09 at 12 43 20 am

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝реА рдЧрдИ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

private keyHandlers = {
    'ArrowDown': function ($event: any) {
      this.handleArrowDown($event);
    },
    'ArrowUp': ($event: any) => {
      this.handleArrowUp($event);
    },
  };

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ handleArrow* рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ this рдореЗрдВ this.handleArrowDown($event); рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ handleArrowDown ред рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдм рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ this рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ handleArrowUp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

  private keyHandlers = {
    'ArrowDown': function (this: SomeComponent, $event: any) {
      this.handleArrowDown($event);
    },
    'ArrowUp': ($event: any) => {
      this.handleArrowUp($event);
    },
  };

@ jmlopez-рд░реЙрдб рдзрдиреНрдпрд╡рд╛рджред рдпреЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ function(this: SomeComponent, ...) {...} рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд▓рдЪреАрд▓рд╛ рд╣реИред

рдпрджрд┐ keyHandlers рд╡рд░реНрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

const keyHandlers = {
  'ArrowDown': function (this: SomeComponent, $event) {
    this.handleArrowDown($event); // error on accessing private method, filing an issue for it.
  },

  'ArrowUp': ($event) => { // doesn't work, duh
    this.handleArrowUp($event);
  }
}

export class SomeComponent {
  onKeyDown($event) {
    if (typeof keyHandlers[$event.code] === 'function') {
      keyHandlers[$event.code]($event);
    }
  }
  private handleArrowDown(_event) {
    // ...
  }

  private handleArrowUp(_event) {
    // ...
  }
}

рджреВрд╕рд░реА рдУрд░, рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрд░реЛ рдлрдВрдХреНрд╢рди рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рд╣реИред

рдореИрдВ console.log рдЙрдкрдпреЛрдЧ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП IE9 рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ window.console рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

if (!window.console)
    window.console = {};

рд▓реЗрдХрд┐рди рдореБрдЭреЗ error TS2540: Cannot assign to 'console' because it is a constant or a read-only property. рдХреНрдпрд╛ рдЗрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

@amiraliakbari рдЖрдк window рдХреЛ any рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рд╕реЗ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

(window as any).console = {};

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ console.log рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб/рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ - рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Project.logging рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

(window.console as any).___real_log = window.console.log;
window.console.log = function(args) {
  if (Project.logging) return (window.console as any).___real_log(args);
  return;
};

рдпрд╣ рдореЗрд░реЗ рдкреВрд░реЗ рдХреЛрдб рдореЗрдВ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдбрд╛рд▓рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рдл рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ console.log рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

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

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

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

#19139 рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред

рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рд╕рдЦреНрдд рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ noImplicitAny рдХреЛ рдЫреЛрдбрд╝рдирд╛ (рдпрд╛рдиреА, рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ any рдпрджрд┐ рдирд╣реАрдВ рдПрдиреЛрдЯреЗрдЯ)ред рдЖрдк рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ JS рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ allowJs рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди checkJs рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд┐рдпрд╛? рд╕рдорд╛рдзрд╛рди рдЕрднреА рдмрд╛рдХреА рд╣реИ! рдПрдХ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐-рджрдмрд╛рдиреЗ-рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рдмрдЬрд╛рдп рдЖрдк 2 рд╕рд╛рд▓ рддрдХ рд╡реНрдпрд░реНрде рдЪрд░реНрдЪрд╛ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?

@ webia1 рдЖрдкрдХреА рд░реБрдЪрд┐ #19139 рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИред

(рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛)

рдореИрдВ https://github.com/Microsoft/TypeScript/pull/21602 рдкрд░ рднрд╛рдЧрд╛ рдФрд░ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ // @ts-ignore рдЬреЛрдбрд╝реЗрдВ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ // @ts-ignore <some code error> рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.7.2 рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

(рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ // @ ts-рдЕрдирджреЗрдЦрд╛рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

21602 рдХрд╛ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдЖрдк рдХреЗрд╡рд▓ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

@RyanCavanaugh рддреБрдо рд╕рд╣реА рд╣реЛ! рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдЕрдкрдбреЗрдЯ рдХрд░ рд▓реА рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рддреНрд░реБрдЯрд┐ TS2339 рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪреЗред

document.getElementById('theme-admin').disabled = false; /* tslint:disable */
document.getElementById('theme-member').disabled = true; /* tslint:disable */
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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