Typescript: рд╕реБрдЭрд╛рд╡: рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░

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

JSDoc рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯрд╛рдЗрдк рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рджреЛ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ

var myString: !string = 'hello world'; //non-nullable
var myString1: ?string = 'hello world'; // nullable 
var myString2: string = 'hello world'; // nullable 
var myString3 = 'hello world'; // nullable

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрд╢рдХреНрдд рд╣реИрдВред

рджреЛ рдирдП рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ:

  • inferNonNullableType рд╕рдВрдХрд▓рдХ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ:
var myString3 = 'hello world' // typeof myString is '!string', non-nullable
  • nonNullableTypeByDefault (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
var myString: !string = 'hello world'; // non-nullable
var myString1: string = 'hello world'; // non-nullable 
var myString2: ?string = 'hello world'; // nullable 
var myString3 = 'hello world' // non-nullable
Committed Fixed Suggestion

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

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

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

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

function(myNonNull:!myClass):void {
  myNonNull.foo();
}

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

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

рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпрд╣ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрднреА рдереЛрдбрд╝рд╛ рд╕рд╛ Maybe<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рд╛рд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВред

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

рд╕рдорд╛рд░реЛрд╣ (myNonNull:!myClass): рд╢реВрдиреНрдп {
myNonNull.foo();
}
рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рд╕рдмрдХреБрдЫ рдЦреБрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЛрдИ рдФрд░ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреБрдЫ рд╢реВрдиреНрдп рдФрд░ рдХрдмреВрдо рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ рдЖрдк рдпрд╣ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function myFunc(str: string): int {
 return str && str.length;
}

рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП int рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд▓рд╛рдн рд╕рдВрдХрд▓рдХ рдкрд╛рд╕ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реМрдВрдкрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪреЗрдВрдЧреЗ, рд╢реВрдиреНрдп/рдЧреИрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреЗрдХ рд╣реЛрдиреЗ рдкрд░ -рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд╡реИрд╕реЗ SaferTypeScript рдФрд░ ClosureCompiler рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВред

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

var myNullableString: (null | string);
var myString = "hello";
myNullableString = myString //valid
myString = myNullableString // error null is not assignable to string;

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

var myString: string; // error
var myNullableString: (null | string); // no error

function myString(param1: string, param2?: string) {
  // param1 is string
  // param2 is (null | string)
}

@fdecampredon +1

рдЖрдИрдЖрдИрдЖрд░рд╕реА рд╕реЗ рдлреЗрд╕рдмреБрдХ рдиреЗ рдлреНрд▓реЛ рджрд┐рдЦрд╛рдпрд╛ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡реЗ рдЖрдкрдХреЗ рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ (null | T) рд▓рд┐рдП рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ ?T рдпрд╛ T? ред

var myString: string; // error

рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдкрд░реЗрд╢рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдЪрд░ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

var myString: string;
if (x) {
myString = a;
} else if (y) {
myString = b;
} else {
myString = c;
}

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

рдИрдорд╛рдирджрд╛рд░реА рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░ рд░рд╣реА var myString = '' рдХреЗ рдмрдЬрд╛рдп var myString: string рдореБрдЭреЗ рдЗрддрдирд╛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рд╕рди рдХреА рддрд░рд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП

(null | string) рд▓рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐ рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ?string рдареАрдХ рд╣реИред
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ @johnnyreilly рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХрд▓рди рд╕рдордп рдЬрд╛рдВрдЪ рд╣реИ

рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЧреБрдгреЛрдВ рдХреЛ рдЕрддрд┐рд░рдВрдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдкреНрд▓рд╕ рдирд┐рдпреЛрдЬрд┐рдд "рдЕрдЧрд░/рдЯрд╛рдЗрдкрдСрдл рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд┐рдВрдЧ" (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕реЗ рдЕрд╢рдХреНрдд рдФрд░ рдЧреИрд░-рдЕрд╢рдХреНрдд рдПрдкреАрдЖрдИ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рднреА рдмрдирд╛рддреЗ рд╣реИрдВред

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

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

@samwgoldman рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдХреЗ рддрд╣рдд рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ nonImplicitAny рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ strict рдпрд╛ nonNullableType рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдХреЛрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

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

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

рдареАрдХ рд╣реИ, рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ ? type рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб type | null | undefined ред

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

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

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

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

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝реНрд▓реИрдЧ рд╕реНрд╡рд┐рдЪ рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдирд┐рдпрдо рд╕рд░рд▓ рд╣реЛрдВрдЧреЗ:

  • рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ ? string string рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ null рдпрд╛ undefined рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ
  • nonNullableType рдореЛрдб рдореЗрдВ ? string string | null | undefined рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ null рдпрд╛ undefined null рдпрд╛ undefined рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ

рдлрд╝реНрд▓реИрдЧ-рд╕реНрд╡рд┐рдЪреНрдб рдлрд╝реАрдЪрд░ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрддрд┐ рдХрд╣рд╛рдБ рд╣реИ?

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

function fn(x: string): number;
function fn(x: number|null): string;

function foo() {
    return fn(null);
}

var x = foo(); // x: number or x: string?

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдорд╛рди рд░рдЦрдирд╛ рдФрд░ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╣реИ рдЙрд╕реЗ рдмрджрд▓рдирд╛ рдмрдирд╛рдо рдЬреЛ рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╣реАрдВ рд╣реИ, рдмрд╣реБрдд рдХреБрдЫ рдЬреИрд╕реЗ noImplicitAny рдЖрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

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

рдкреНрд░рд╡рд╛рд╣ рдбреЙрдХреНрд╕ рд╕реЗ :

рдкреНрд░рд╡рд╛рд╣ рд╢реВрдиреНрдп рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рдорд╛рдирддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ

var o = null;
print(o.x); // Error: Property cannot be accessed on possibly null value

рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдЯреА рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╢реВрдиреНрдп (рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓реНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЯреА

var o: ?string = null;
print(o.length); // Error: Property cannot be accessed on possibly null or undefined value

[рдкреНрд░рд╡рд╛рд╣] рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ

(рдпрд╛рдиреА рдЯреАрдПрд╕ рд▓рд┐рдВрдЧреЛ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ)

var o: ?string = null;
if (o == null) {
  o = 'hello';
}
print(o.length); // Okay, because of the null check

рд╕реАрдорд╛рдУрдВ

  • рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдХрд╛рд░рдг рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдкрд░ рдЬрд╛рдБрдЪ рд╕реАрдорд┐рдд рд╣реИ:

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

  • рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб-рд╕реНрдЯрд╛рдЗрд▓ рдЪреЗрдХ рдмреЗрдорд╛рдиреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

  • undefined рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

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

@jbondc рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд░ рдЬрдЧрд╣ ! рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛: p

It's tempting to want to change JavaScript but the reality is a 'string' is nullable or can be undefined.

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

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

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

@metaweta рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ _non null рдореЙрдбреНрдпреВрд▓_ рдПрдХ рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

//module A
export function getData(): string[] {
  return null;
}
//module B
'use nonnull'
import A = require('./A');

var data: string[] = A.getData();

рдореЙрдбреНрдпреВрд▓ рдмреА рдореЗрдВ data рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реВрдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдП рдореЗрдВ 'use nonnull' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?
рдореБрдЭреЗ рдирд┐рд░реНрджреЗрд╢ рдЖрдзрд╛рд░рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рд╣рд╛рдВ,

var data: string[] = A.getData();

рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ getData() рд░рд┐рдЯрд░реНрди null рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

var data: string[] = A.getData() || [];

@metaweta рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ? :)
getData рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрднреА рднреА рд╣реИ '() => string[]' рдХреНрдпрд╛ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ 'nullable рдореЙрдбреНрдпреВрд▓' рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ 'nullable' рдорд╛рдиреЗрдВрдЧреЗ?

рд╣рд╛рдВ, рдмрд┐рд▓реНрдХреБрд▓ (рдЬрдм рддрдХ рдХрд┐ рдЕрд╢рдХреНрдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреНрдпрдерд╛ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

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

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

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

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

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

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

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЕрдЧрд░ use not-null рдЬреЛрдбрд╝рдирд╛ рд╕рднреА рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдЕрдкрд╡рд╛рдж рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреАрдордд рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рднреБрдЧрддрд╛рди рдХрд░реВрдВрдЧрд╛, null рдпрд╛ undefined рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдорд╛рдирддреЗ рд╣реБрдП рдмрджрддрд░ рддреНрд░реБрдЯрд┐ рд╣реИ рд╡рд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИред

@jbondc рдореИрдВрдиреЗ 'рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореЗрд░реА рдзрд╛рд░рдгрд╛рдПрдВ рдЧрд▓рдд рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ:

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

рддреЛ рдХреЛрдб:

function myfoo (mynumber: number) {
    return !!mynumber;
} 

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

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

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

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

"use not-null";
// All types in this program production (essentially a single file) are not null

рдмрдирд╛рдо

function f(n: number) {
  "use not-null";
  // n is not null and local variables are not null
  function g(s: string) {
    // s is not null because g is defined in the scope of f
    return s.length;
  }
  return n.toFixed(2);
}

function h(n: number) {
  // n may be null
  if (n) { return n.toFixed(3); }
  else { return null; }
}

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

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рджреЛ рд╢реВрдиреНрдп рдорд╛рди рд╣реИрдВ, undefined рдФрд░ null ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ null рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдЧреИрд░-рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ regexp рдкрд░ рдФрд░ JSON рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдирд╛рдВрдХ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╕рдордп рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдПрдкреНрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдерд╛ред рд╡реЗрд░рд┐рдПрдмрд▓ рдЬрд┐рдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ undefined , рди рдХрд┐ null ред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЧреБрдо рдЧреБрдг undefined рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рди рдХрд┐ null ред рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ undefined рдПрдХ рдорд╛рдиреНрдп рдорд╛рди рд╣реЛ, рддреЛ рдЖрдк propName in obj рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд╕реНрддреБ рдкрд░ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ obj.hasOwnProperty(propName) ред рдЧреБрдо рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ -1: 'abc'.indexOf('d') === -1 рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

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

рдпрджрд┐ рд╣рдо "рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ-рд╢реВрдиреНрдп" рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЕрдкрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ "рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ-рд╢реВрдиреНрдп" (рди рддреЛ рдЕрд╢рдХреНрдд рдФрд░ рди рд╣реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдЪрд╛рд╣реВрдВрдЧрд╛ред

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

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

@metaweta , рдЖрдк рдЦреБрдж рдХреЛ рдирд▓ рд╕реЗ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЛ рд░реБрд▓рд╛рдиреЗ рдХреЗ рдПрдХ рдЧрдЬрд▓рд┐рдпрди рддрд░реАрдХреЗ рд╣реИрдВ: pleaseNonNullablesNumbersOnly(<any> null) ред рдЬреЗрдПрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдИ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВред рджреВрд╕рд░реА рдмрд╛рдд, рдЖрдк рдХреНрдпреЛрдВ рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗ? рдЗрд╕реЗ рдЬрд╝реЛрд░ рд╕реЗ рдХрд╣реЗрдВ рдФрд░ nulls are not supported, you put a null you will get a crash рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ, рдПрдХ рдЕрд╕реНрд╡реАрдХрд░рдг рдХреА рддрд░рд╣, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╡рд╣рд╛рдБ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛, рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдПрдХ рдкреНрд░рдореБрдЦ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдЕрднреА рднреА рдкрд╛рдЧрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рддреЛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдкреНрд░рдпрд╛рд╕ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?

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

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

рд╡рд┐рд╖рдп рдкрд░:
рд╣рдореЗрдВ рдЕрдиреНрдп рдХреЛрдб рдореЗрдВ рдирд▓ 'рдПрд╕реНрдХреЗрдкрд┐рдВрдЧ' рдХреЗ рд╕рд╛рде рдХрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ NaN рджрд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рдХреЛрдб рдкреНрд░рдмрдВрдзрди рдзреНрд╡рдЬ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

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

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

  • рдХреЛрдИ ! рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП string! рдПрдХ рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛
  • noNullsAllowed рд╕реНрд╡рд┐рдЪ рдЪрд╛рд▓реВ рд╣реИ

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

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдЙрд╕реА рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛, рдпрджрд┐ рдореИрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдВрдкрддреНрддрд┐ x рд╕рд╛рде рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рд╕реЗ {"x":"foo"} рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ . рд╕рд░реНрд╡рд░ рдкрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдФрд░ рдПрдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрджрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░реНрд╡рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдореЗрд░реЗ рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП .d.ts рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрднреА рднреА JSON рдХреЛ рдирд▓ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ред рдЗрд╕рдореЗрдВ рдпрд╛ рдХреЛрдИ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХреА x рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

@metaweta , рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рд╣реЛрдЧрд╛, рдореИрдВ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрд╢рд╛рд╕рди (рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╢реВрдиреНрдп рдЕрдХреНрд╖рд░ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░рдХреЗ) рдЖрдк рдмрд┐рдирд╛ рдкреВрдЫреЗ рдЕрдкрдиреА 90% рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕рдВрдХрд▓рдХ рд╕реЗ рдХреЛрдИ рдорджрджред рдареАрдХ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЙрдкрд╛рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди рд╣реЛрдВ, рдлрд┐рд░ рднреА рдЖрдк рд╢реЗрд╖ 10% рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рддреЛ рдЖрдЦрд┐рд░ рд╕рд╡рд╛рд▓ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ: рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рдХрдИ рдЗрд╕рдХреА рдЗрддрдиреА рдмреБрд░реА рдЬрд░реВрд░рдд рд╣реИ? рдореИрдВ рдирд╣реАрдВ, рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдмрд┐рдирд╛ рдирд▓ рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреИрд╕реЗ рдЬреАрдирд╛ рд╣реИ (рдореБрдЭрд╕реЗ рдкреВрдЫреЗрдВ рдХреИрд╕реЗ), рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдПрдХ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛ рдерд╛ (рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреВрд▓рд░ рд╕рд╛рдорд╛рди рд╣реЛрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЗрддрдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИред

рд╣рд╛рдВ, рд╣рдореЗрдВ рдЗрд╕рдХреА рд╕рдЦреНрдд рдЬрд░реВрд░рдд рд╣реИред рд╣реЛрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрд░рдм рдбреЙрд▓рд░ рдХреА рдЧрд▓рддреА рджреЗрдЦреЗрдВред рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдЕрдкрд╡рд╛рдж (рдПрдирдкреАрдИ) рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рддреНрд░реБрдЯрд┐ рд╣реИ рдЬреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЕрд╢рдХреНрдд рдореЗрдВ рднреЗрджрднрд╛рд╡ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрд╣ рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ 8 рдиреЗ рдЗрд╕реЗ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрддрд╛рдм рдкреНрд░рдпрд╛рд╕ рдореЗрдВ Optional рдЬреЛрдбрд╝рд╛ред

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

рдЕрдм рдЬрдмрдХрд┐ TS рдореЗрдВ рдпреВрдирд┐рдпрди рдФрд░ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рд╣реИрдВ, рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.0 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдкрд┐рдЫрдбрд╝рд╛-рдЕрд╕рдВрдЧрдд рд╣реЛред

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

рдпрд╣ рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ _рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА - рдЕрдм рдЙрдирд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдмреАрдЬрдЧрдгрд┐рддреАрдп Maybe рдкреНрд░рдХрд╛рд░ рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдХреЗрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдЕрдЧрд░ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)

рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рд╢рд╛рдмреНрджрд┐рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред null рдФрд░ undefined рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ (afaik рдРрд╕реЗ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди/рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдПрдХ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдкрд░ рдирд╣реАрдВ) рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЯреАрдПрд╕ рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@рдореЗрдЯрд╛рд╡реЗрдЯрд╛ ,

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдЧреИрд░-рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ regexp рдкрд░ рдФрд░ JSON рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдирд╛рдВрдХ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╕рдордп рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрддрдИ рд╕рдЪ рдирд╣реАрдВ рд╣реИред

  • рдбреЛрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рд╢реВрдиреНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
  console.log(window.document.getElementById('nonExistentElement')); // null
  • рдЬреИрд╕рд╛ рдХрд┐ @ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛, рдЕрдЬрд╛рдХреНрд╕ рдСрдкрд░реЗрд╢рди рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ undefined рдорд╛рдиреНрдп JSON рдорд╛рди рдирд╣реАрдВ рд╣реИ:
 JSON.parse(undefined); // error
 JSON.parse(null); // okay
 JSON.stringify({ "foo" : undefined}); // "{}"
 JSON.stringify({ "foo" : null}); // '{"foo":null}'

рдПрдирдмреА: рд╣рдо рджрд┐рдЦрд╛рд╡рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ undefined рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк undefined - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реИред

рдпрджрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░реНрд╡рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдореЗрд░реЗ рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП .d.ts рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрднреА рднреА JSON рдХреЛ рдирд▓ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ред рдЙрд╕рдореЗрдВ рдпрд╛ рдХреЛрдИ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХрд╛ x рдЧреБрдг рдХреЛрдИ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

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

рдореИрдВ рдЗрд╕ рдкрд░ @aleksey-bykov рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрдВ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕рдЪреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрд╢рдХреНрдд рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдкрд╛рддрд╛ рд╣реИред

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

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддрд░реНрдХ _for_ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рднрдВрдбрд╛рд░рдг рдирд▓ рдлреВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рднрдВрдбрд╛рд░рдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рдХрд╛рд░ Nullable<Foo> рд╣реИ, рдлреВ рдирд╣реАрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдлреВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк _have_ рдХреЛ рд╢реВрдиреНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддреЗ рд╣реИрдВ (рдпрд╛ рддреЛ рдЖрдк рдЗрд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рд╢реВрдиреНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ)ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдереЗ, рддреЛ рдЖрдк рдЬрд░реВрд░реА рдирд╣реАрдВ рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╕рдордп рд╢реВрдиреНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛, рдЬрдмрдХрд┐ рд╢реВрдиреНрдп рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрдд рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреИрд░-рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗ?

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

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

рдореИрдВ рдЗрд╕ рдкрд░ @aleksey-bykov рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрдВ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕рдЪреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрд╢рдХреНрдд рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдкрд╛рддрд╛ рд╣реИред

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

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд▓рдЧрд╛, рдЧреИрд░-рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд╢рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдирд▓ рдкреЙрдЗрдВрдЯрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рддреНрд░реБрдЯрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдбрд░ рд╕реЗ null рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдд рдХреГрдкрдпрд╛ рдПрдХ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рди рдЬрд╛рдПрдВ рдЬреИрд╕реЗ:

рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдмреЗрдХрд╛рд░ рд╣реИрдВред рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдмреЗрдХрд╛рд░ рд╣реИрдВред рд╡реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВред рдирд┐рдХрдореНрдорд╛! рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

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

рдУрдкреА рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ:

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

рдореИрдВ рдХреЗрд╡рд▓ рдЬрдВрдЧрд▓реА рдореЗрдВ null рдФрд░ undefined рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред

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

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

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

1) рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ)ред
2) рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдорд╛рди рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
3) рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

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

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

рд╣рд▓ 2 рднреА рдЗрд╕реА рд╕реЗ рд╣рд▓ рд╣реЛрддрд╛ рд╣реИред

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

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

(рдлреЛрди рд╕реЗ рдкреЛрд╕реНрдЯрд┐рдВрдЧ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)

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

@spion , рдмреБрд░реА рдЦрдмрд░: рдПрдл # рдирд▓ (.NET рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд░реВрдк рдореЗрдВ) рдорд┐рд▓рд╛ред рдЕрдЪреНрдЫреА рдЦрдмрд░: рдХреЛрдИ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╡рд╣рд╛рдВ рд╣реЛрдВ рддреЛ рдЖрдк рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдЙрдирдХреЗ рдкрд╛рд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЬрд╛рд╡рд╛ рдХреА рддрд░рд╣)ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ рддреЛ рдЖрдкрдХреЛ рд╢реВрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрддрдГ рдореИрдВ рдпрд╣реА рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ: рдЕрдХреЗрд▓реЗ рдирд▓ (рдЧреИрд░-рдирд▓) рдЫреЛрдбрд╝ рджреЗрдВ, рдмрд╕ рднреВрд▓ рдЬрд╛рдПрдВ рдХрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ, рдФрд░ рдПрдбреАрдЯреА рдХреЛ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рд╣рдо рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрд╕реА рддрд░рд╣ рдирд╣реАрдВ рдЬреИрд╕реЗ рдЖрдк рд▓реЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реА рдХрдВрдкрдиреА рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИред

1) рдЬрдм рдбреЗрдЯрд╛ (рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛ рдХреА рддрд░рд╣) рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдордп рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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

рдЬрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдо рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╢реВрдиреНрдп рд╢рдмреНрдж рджреЗрдЦреЗрдВрдЧреЗред

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЧрд╛рдпрдм рд╣реИ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореВрд▓ рд╕реНрд░реЛрдд рдХреЗ рдХрд░реАрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рддрд░рдл рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рдВрдШ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╢реВрдиреНрдп рдорд╛рди рдХрд╛ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@fdecampredon , TS рдореЗрдВ ADT рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдРрд╕реЗ рд╕рдВрдШ рд╣реИрдВ рдЬреЛ рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, 1. рд╡реЗ рдПрдХ рдЦрд╛рд▓реА рдорд╛рдорд▓реЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореЙрдбрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЗрдХрд╛рдИ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, 2. рд╡рд┐рдирд╛рд╢ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЙрдиреНрд╣реЗрдВ

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

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

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

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рд╕реЗ рдмрдЪреЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрди рдХрд╛рд░реНрдп рд╣реИ

declare function getName(personId:number):string|null;

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

function doSomethingWithPersonsName(personId:number) {
  var name = getName(personId);
  if (name != null) return doThingsWith(name); // type guard narrows string|null to just string
  else { return handleNullCase(); }
}

рдФрд░ рдЕрдм рддреБрдо рдорд╣рд╛рди рд╣реЛ! рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ doThingsWith рдХреЛ рдРрд╕реЗ рдирд╛рдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ

function doThingsWith(name:string) {
  // Lets create some funny versions of the name
  return [uppercasedName(name), fullyLowercased(name), funnyCased(name)]
}

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

function justUppercased(personId:number) {
  var name = getName(personId);
  return uppercasedName(name); // error, passing nullable to a function that doesn't check for nulls.
}

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

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

declare function getName(personId:number):string;

рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ рдпрджрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ

uppercasedName(null);

рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрддрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред

@jbondc рдПрдХ рд╣реИ https://github.com/Microsoft/TypeScript/issues/186

@fdecampredon рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдмрд╕ рдпрд╣реА рд╣реИрдВ, рд╕рдВрдШред рд╡реЗ _disjoint_ рдпреВрдирд┐рдпрдиреЛрдВ рдЙрд░реНрдл тАЛтАЛрд░рдХрдо рдирд╣реАрдВ рд╣реИрдВред #186 рджреЗрдЦреЗрдВред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдЕрднреА рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

// lib.d.ts
interface Document {
    getElementById(id: string): Maybe<Element>;
}

...

// Code that worked with 1.3
var myCanvas = <HTMLCanvasElement>document.getElementById("myCanvas");
// ... now throws the error that Maybe<Element> can't be cast to an <HTMLCanvasElement>

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

class Option<T> {
    hasValue: boolean;
    value: T;
}

var { hasValue, myCanvas: value } = <Option<HTMLCanvasElement>> $("myCanvas");
if (!hasValue) {
    throw new Error("Canvas not found");
}
// Use myCanvas here

рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдореВрд▓реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ lib.d.ts (рдФрд░ рдХреЛрдИ рдЕрдиреНрдп .d.ts, рдФрд░ рдЖрдкрдХрд╛ рдкреВрд░рд╛ рдХреЛрдбрдмреЗрд╕ рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ a рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦрддреЗред

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

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

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

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

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рд╣рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╕рднреА рдореМрдЬреВрджрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрд░рдХрд░рд╛рд░ рд╣реИрдВ

_I_ рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╛рд░рдг рдмрддрд╛ рджрд┐рдпрд╛ рд╣реИ:

рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдореВрд▓реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ lib.d.ts (рдФрд░ рдХреЛрдИ рдЕрдиреНрдп .d.ts, рдФрд░ рдЖрдкрдХрд╛ рдкреВрд░рд╛ рдХреЛрдбрдмреЗрд╕ рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ a рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦрддреЗред


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЧреИрд░-рд╢реВрдиреНрдп рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдХрднреАред

TS 1.x рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред 2.0 рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (lib.d.ts рдЖрджрд┐) рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ _in рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛_ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди foo рд╣реИ рдЬреЛ Option<number> рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рд░ рдЬреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдореИрдВ рдмрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реВрдВ, рддрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╛рд░ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ "рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред"? рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджрдВрдбрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ?

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

Old_lib.d.ts

...
declare function bar(): number; // looks like can return a potentially nullable number
...

рд╕рдВрд╢реЛрдзрд┐рдд_lib.d.ts

declare function bar(): !number; // now thank to the knowledge we are 100% certain it cannot return null

рдЕрдм рдкреБрд░рд╛рдиреЗ рдРрдкреНрд╕ old_lib.d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдирдП рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрд╡рд▓рдкрд░ revised_libs.d.ts рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд_рд▓рд┐рдмреНрд╕.рдбреА.рдЯреАрдПрд╕ рдореЗрдВ 50 рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рд╡рд╛рдкрд╕реА рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рд╢реВрдиреНрдп рд╕рдВрдЦреНрдпрд╛ рд╣реИ)ред рдЕрдм рдХреНрдпрд╛?

рдареАрдХ рд╣реИ, рдЕрдкрдирд╛ рд╕рдордп рд▓реЗрдВ, рдорджрдж рдорд╛рдВрдЧреЗрдВ, рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдм рддрдХ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЗ рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝рддреА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдирд╛рддрдХ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ: revised_lib.v-0.1.12.d.ts )

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЗ рд╕рд╛рде рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ ! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЦреЛрдЬрддреЗ рд╣реИрдВ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ред

рдореИрдВ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдБ! рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рди рд╣реИ (рдХреАрд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЛрдиреЛрдВ)ред рдЕрдЧрд░ рд╣рдо 1.x рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ ! рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ 2.0 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдВрддрд┐рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

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

рдХреНрдпрд╛ 2.0 рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдХреЛ рд╡рд╣рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ TS рдЯреАрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╣рд╛рдВ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рддрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдорд┐рд▓рд┐рдпрди-рд▓рд╛рдЗрди рдХреЛрдбрдмреЗрд╕ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореЗрд░реЗ рд╡реЛрдЯ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рдлрд╝рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ F# рдХреЗ рд╕рд╛рде DOM API рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рдирд▓ рдХреЛ рдХреИрд╕реЗ рд╕рдореЗрдЯрддреЗ рд╣реИрдВ (Funscript F# рдХреЛрдб рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ lib.d.ts рдФрд░ рдЕрдиреНрдп .d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП http://funscript.info/samples/canvas/index.html рдХреЛ рджреЗрдЦрдХрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдкреНрд░рджрд╛рддрд╛ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ document.getElementsByTagName("canvas")[0] рдХрднреА рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ document.getElementById() рдХреЗ рдЕрд╢рдХреНрдд рд▓реМрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк <рддрддреНрд╡> рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

@spion
рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред

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

@Griffork рдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреА рдЗрд╕

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

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

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

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

рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореИрдВ (рд╕реЛрдЪрддрд╛ рд╣реВрдВ) рдЙрди рд╕рднреА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛

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

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

рдЕрд╢рдХреНрдд рд░рдЦрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдм рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВ:
тАв рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗ рдмреЗрд╣рддрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИред
. 1) рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рддреЗрдЬрд╝ рд╣реИ (рд╣рдорд╛рд░рд╛ рдХреЛрдб рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
. 2) рдпрд╣ рд▓реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
. 3) рд░рд┐рдХреНрдд рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рд░рдгреА рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдЕрдиреБрдкрд▓рдмреНрдз рдорд╛рдиреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ indexOf (рдФрд░ рд╢рд╛рдпрдж рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп delete array[i] рдФрд░ array[i] = undefined рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред

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

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

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

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

рдирд┐рд╖реНрдХрд░реНрд╖:
рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЧреИрд░-рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИрдВред

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

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

@spion
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдВрддрддрдГ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред

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

рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред

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

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

рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдлреНрд▓реЛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦрд╛:

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

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

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

рдкреА.рдПрд╕.

foo(thing: whatiknowaboutmyobject) {
    if (thing.hidden) {
        delete thing.description;
    }
}

if (typeof thing.description === "string") {
    //thing.description is non-nullable now, right?
    foo(thing);
    //What is thing.description?
    console.log(thing.description.length);
}

TS рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рднреА рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ)ред рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛:

function foo(obj: { bar: string|number }) {
    obj.bar = 5;
}

var baz: { bar: string } = { bar: "5" };

foo(baz);

console.log(baz.bar.charAt(0)); // Runtime error - Number doesn't have a charAt method

рдлреНрд▓реЛ рдбреЙрдХреНрд╕ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдгред

рдкреБрд░рд╛рдирд╛:

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдзрди рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рджреВрд╕рд░реЗ рдореВрд▓реНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ,

mything.mystring = 5; // is clearly wrong.
delete mything.mystring; //is not clearly wrong - this is not quite the equivalent of setting mystring to >undefined.

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

@Griffork рдЗрд╕

var mything = {mystring: "5"}; 
delete mything.mystring;
console.log(mything.mystring.charAt(1));

рд╡реИрд╕реЗ, рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╡реИрд╕реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЯрд╛рдЗрдк рдирд▓ рдХрд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рднреА рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

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

@spion

рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ

рдЕрдЧрд░ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

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

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

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

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдордЬрдмреВрдд рдЕрд╕рд╣рдорддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдКрдкрд░ рдЖрдЗрдЯрдо C рдпрд╛ рддреЛ рддреБрдЪреНрдЫ рдпрд╛ рдЕрдХреНрд╖рдореНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@jbondc рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдпрд╣ рдкреВрдЫрд╛ред рджрд░рдЕрд╕рд▓ CallExpression рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИ - рдпрд╣ рдЕрднреА рднреА typeArguments рдкрд░ рд╕рднреА рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдирдП рд╕рдВрдШ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рдХрд╛рд░ рдХреЛ NodeArray<TypeNode>|null рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдм рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рд▓рд╛рдЧреВ рди рд╣реЛ:

if (ce.typeArguments != null) {
  callSomethingOn(ce.typeArguments)
}

// callSomethingOn doesn't need to perform any checks

function callSomethingOn(na:NodeArray<TypeNode>) {
...
}

TS 1.4 рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдбреЛрдВ рдХреА рдорджрдж рд╕реЗ, if рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ NodeArray<TypeNode> рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА NodeArray рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛; рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЙрд╕ рдЪреЗрдХ рдХреЗ рднреАрддрд░ рдмреБрд▓рд╛рдП рдЧрдП рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ NodeArray<TypeNode> рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдФрд░ рдЬрд╛рдВрдЪ рдХреЗ, рдХрднреА рднреАред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ

function someOtherFunction(ce: CallExpression) {
  callSomethingOn(ce.typeArguments)
}

рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛, рдФрд░ рдмрдЧ рдмрд╕ рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛрдЧрд╛ред

рддреЛ рдирд╣реАрдВ, @NoelAbrahams , рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЪрд░ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рдеред

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

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

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

@spion , рдореИрдВ рдпрд╣ _by рдбрд┐рдлрд╝реЙрд▓реНрдЯ _ рд╣реЛрдВ?

рдпрд╣ рдмрд╣рд╛рдирд╛ рдХрд┐ рддрд╛рд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ (рдЕрд░реНрдерд╛рддреН рдЕрдЬрд╛рдХреНрд╕) рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ, рдХрд╛ рдЕрд░реНрде рд╣реИ рдИрд╢реНрд╡рд░ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛрдирд╛

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

рдЬрд╝рд░реВрд░ред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрд╢рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЬрд╣рд╛рдВ рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИрдВ) рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЬрд╣рд╛рдВ рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╣реИрдВ)ред

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

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

рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реАрдорд┐рдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрд╢рдХреНрдд рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЪрд░/рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд▓реЗрдЦрдХ рдХреЛ рдЕрдзрд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрднреА рднреА рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИред
рдЕрдВрдд рдореЗрдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рднреА рдЕрдЬреАрдм рд╣реИ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрдд рд╣реЛрддрд╛ рд╣реИ: ?string string | null | undefined рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреИрд░ рдЕрд╢рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдк !string рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВрдЧреЗ? string - null - undefined ?

рдЕрдВрдд рдореЗрдВ рдореИрдВ рдпрд╣рд╛рдБ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛, null рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдЙрд╕реА рддрд░рд╣ 5 рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рджреЛрдиреЛрдВ рдорд╛рди рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдЬрд╣рд╛рдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рд╡рд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░реНрдЪреА рджреЗрдирд╛ var myString: string = null рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИ: var myString: string = 5 ред
рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдирд╛ рд╢рд╛рдпрдж рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЦрд░рд╛рдм рд╣реИред

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

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

interface Foo {
        name: string;
        address: string|null; /* Nullable */
}

var foo:Foo = new FooClass();
foo.name.toString(); // Okay
foo.address.toString(); // Error: do not use without null check

рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рдЪреАрдЬ рдкрд░ рдЖрдкрддреНрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

foo.name = undefined; // Error: non-nullable

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░реЗрдЧрд╛ред

рдареАрдХ рдпрд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

interface Foo {
        name: string;
        address: string|number; 
}
var foo:Foo = new FooClass();
foo.name.toString(); // Okay
foo.address.slice() // error

foo.name  = 5 // error

рдФрд░ рдпрд╣ рдЕрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ

рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдХрд┐рддрдиреА рдмрд╛рд░ рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдг рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рддреЗ рд╣реИрдВ?

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

@fdecampredon
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ ,

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

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

interface MyType {

     name: string;

     /** The date the entry was updated from Wikipedia or undefined for user-submitted content. */
     wikiDate: Date; /* Nullable */
}

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

@fdecampredon

foo.name = 5 // error
рдФрд░ рдпрд╣ рдЕрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ

рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬрдмрдХрд┐

foo.name = рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд; // рд╕рд░реНрд╡рд░ рдХреЛ рдирд╛рдо рди рднреЗрдЬреЗрдВ

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╕реЗ рдлрд┐рдЯ рд╣реЛрдЧрд╛, рд╡рд╣ рд╣реИ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛, рдмрд▓реНрдХрд┐ рдореВрд▓ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛:

 wikiDate: ?Date;

рдореИрдВ @NoelAbrahams . рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ

foo.name = 5 // рддреНрд░реБрдЯрд┐
рдФрд░ рдпрд╣ рдЕрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ
рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдВрдХрд▓рдХ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдирд╛рдо рдХреЛ string рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ рди рдХрд┐ string | number рдпрджрд┐ рдЖрдк рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ ?string рдпрд╛ string | null рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗ (рдЬреЛ рдХрд╛рдлреА рд╕рдордХрдХреНрд╖ рд╣реИ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╕реЗ рдлрд┐рдЯ рд╣реЛрдЧрд╛, рд╡рд╣ рд╣реИ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛, рдмрд▓реНрдХрд┐ рдореВрд▓ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛:

рд╡рд┐рдХрд┐ рджрд┐рдирд╛рдВрдХ: ?рддрд┐рдерд┐;

рддреЛ рд╣рдо рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░ рд╢реВрдиреНрдп рд╣реИрдВ рдФрд░ рдЖрдк ? :) рдХреЗ рд╕рд╛рде рдЕрд╢рдХреНрдд рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ ?Date Date┬а| null | undefined рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ :)

рдУрд╣ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдирд╣реАрдВ рдерд╛ (рдкреНрд░рддреАрдХ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

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

var wikiDate: ?Date;

wikiDate.toString(); // error
wikiDate && wikiDate.toString(); // okay

рдпрд╣ рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 var name: string;   // okay
 name.toString();  // if you think that's fine then by all means

рд╢рд╛рдпрдж рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ null рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ:

wikiDate && wikiDate.toString(); // okay

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

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

var name: string;   // okay
name.toString();  // if you think that's fine then by all means

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

var name: string;   // okay
name.toString();  // error because not initialized
var name: string;
if (something) {
  name = "Hello World";
}┬аelse {
  name = "Foo bar";
}
name.toString();  // no error since name will always be initialized.

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

рдпрд╣ рдПрдХ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдФрд░ 2.0 рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, 'рдЙрдкрдпреЛрдЧ nonnull' рдирд┐рд░реНрджреЗрд╢ @metaweta рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рд╛рде рд╕рд┐рд╡рд╛рдп рд╢рд╛рдпрдж

рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ:

var string1: string; //this works like typescript does currently, doesn't need type-guarding before use, null and undefined can be assigned to it.
string1.length; //works
var string2: !string; //this doesn't work because the string must be assigned to a non-null and non-undefined value, doesn't need type-guarding before use.
var string3: ?string; //this must be type guarded to non-null, non-undefined before use.
var string4: !string|null = null; //This may be null, but should never be undefined (and must be type-guarded before use).
var string5: !string|undefined; //this may never be null, but can be undefined (and must be type-guarded before use).

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

рдЗрд╕ рддрд░рд╣, рдиреЙрди-рдирд▓реЗрдмрд▓реНрд╕ рдПрдХ рдСрдкреНрдЯ-рдЗрди рд╣реИрдВ, рдФрд░ рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХреНрд╕рдкреНрд▓рд┐рд╕рд░реА рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ

рд╡рд┐рдЪрд╛рд░?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдХрд┐рд╕реА рдЕрдиреНрдп TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдЙрд╕реЗ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЪрд╛рд▓реВ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ blah: string рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рд▓реЗрдХрд┐рди blah:!string рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ -noimplicitany рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред

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

рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдкреНрдЯ-рдЗрди, рдСрдкреНрдЯ-рдЖрдЙрдЯ, рдХреЗ рд╕рд╛рде рд╣реИрдВ
рд╕рдВрд╢реЛрдзрдХ рдЯрд╛рдЗрдк рдХрд░реЗрдВ (!?), рдПрдХ рдирд┐рд░реНрджреЗрд╢, рдпрд╛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ; рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░реВрдБрдЧрд╛
рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ _рддрдм рддрдХ рд▓рдЧрддрд╛ рд╣реИ рдЬрдм рддрдХ рд╡реЗ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ_, рдЬреЛ рдирд╣реАрдВ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдорд▓рд╛ред

рд╕реЛрдо, 22 рджрд┐рд╕рдВрдмрд░, 2014 рдХреЛ рджреЛрдкрд╣рд░ 2:35 рдмрдЬреЗ, рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ:

рд╡рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ 1: рд╕реНрдЯреНрд░рд┐рдВрдЧ; // рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рдореЗрдВред, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдк-рдЧрд╛рд░реНрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧ1.рд▓рдВрдмрд╛рдИ; // рд╡рд░реНрдХреНрд╕рд╡рд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ 2: рд╕реНрдЯреНрд░рд┐рдВрдЧ; // рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдк-рдЧрд╛рд░реНрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред var string3: ?string; // рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧреИрд░-рд╢реВрдиреНрдп, рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред var string4: !string|null = null; // рдпрд╣ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдк-рдЧрд╛рд░реНрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)редvar string5: !string|undefined; // рдпрд╣ рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЯрд╛рдЗрдк-рдЧрд╛рд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдФрд░ рдПрдХ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рд╣реИ (рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм -рдиреЛрдЗрдореНрдкреНрд▓рд┐рдХрд┐рдЯрдиреА рдЪрд╛рд▓реВ рд╣реЛ) рдЬреЛ
-noinferrednulls рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ
string, рдФрд░ int) рдФрд░ рдЖрдкрдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреА рд╣реИ a ? рдпрд╛ ! рдЙрдирдХреЗ рд╕рд╛рде (рд╢реВрдиреНрдп, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд
рдФрд░ рдХреЛрдИ рднреА рдЕрдкрд╡рд╛рдж)ред

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

рд╡рд┐рдЪрд╛рд░?

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -67899445
.

рдорд╛рдЗрдХ рд╕реНрдЯреЗ - [email protected]
http://www.cs.auckland.ac.nz/~mike
http://reperiendi.wordpress.com

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдЬреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдХ рдмреБрд░рд╛ рд╣реИ, рдФрд░ рдореИрдВ

  • рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдореЗрдВ рд╕рд╣реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╣рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреА рд╣реЛрдЧреАред
  • рд╣рдо рдХреЛрдб рдкрд░ рд╣рд░ рдЬрдЧрд╣ !string (рдФрд░ рдХрднреА-рдХрднреА ?string ) рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗ рдЬреЛ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдХрдо рдкрдардиреАрдп рдмрдирд╛ рджреЗрдЧрд╛ред
  • !string рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдЕрд╢рдХреНрдд рд╣реИрдВ рдПрдХ рдЕрдЬреАрдм рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ string minus null minus undefined , рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд ?string рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реИрдВ string | null | undefined ред
  • рдореБрдЭреЗ рдЯрд╛рдЗрдк-рдЪреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж (рдФрд░ рдкреВрд░реНрдг рд╣рд╛рдирд┐) рдХреА рдЙрдореНрдореАрдж рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрдХрд▓рдХ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ string | null рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди string рдирд╣реАрдВ, рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣рд┐рд╕реНрд╕рд╛ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдвреАрд▓реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди var myString = "hello" рдХреНрдпрд╛ myString string , ?string рдпрд╛ !string ? рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрд╣рд╛рдБ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕рд┐рд░рджрд░реНрджред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рд╣реИ, рд╡рд╣ рд╣реИ 'use non-null' @metaweta рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд┐рд░реНрджреЗрд╢ред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ use non-null рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдорд╛рдирд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@fdecampredon

  1. рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _рдЖрдкрдХреЛ рд╡рд╣ рдХрд╛рдо рд╡реИрд╕реЗ рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛_ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рдХрд╛рд░ рд╕рд╣реА рд╣реИрдВ) рдФрд░ рдЗрд╕ рдмрд╛рд░ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдПрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдХреНрдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ (рдпрджрд┐ -noimplicitnull рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) )
  2. рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВред рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрдерд╛рди рд╣реИ, рдФрд░ рдЗрд╕реЗ _replaced_ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд╡реЗ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИрдВред)
  3. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛рдПрдБ рджреЗрдЦреА рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рдЕрдиреБрд░реЛрдз (рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП) рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдмрд┐рдирд╛ рдорд╛рд░реНрдХрд░ рдХреЗ)ред рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреА рдФрд░ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рдореИрдВ рдмрд╛рдж рдореЗрдВ рдФрд░ рдЦреЛрдЬ рдХрд░реВрдВрдЧрд╛ред

  4. рдпрджрд┐ рдЖрдк рдЙрд╕ рдмрд╛рдд рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ !string|null рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рддреЛ рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдирд▓ рдХрд╛ рдЗрд▓рд╛рдЬ _like_ {} (рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдерд╛)ред
    рдпрджрд┐ рдЖрдк string|null рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реВрдиреНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд▓ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд╡рд▓ рдпреВрдирд┐рдпрдиреЛрдВ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ! рдФрд░ рдХреЛрдИ рднреА рдХреЛрдИ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
  5. рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрди, рдФрд░ рдПрдХ рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рдЙрдарддрд╛ рд╣реИ рдЬрдм рдЖрдк -noimplicitnull рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреНрд░реБрдЯрд┐ (рд╢рд╛рдпрдж рдЕрд╢рдХреНрдд) рд╣реЛрдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрд┐рдВрджреБ 2 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрд┐рдВрджреБ 4 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб рдЯрд╛рдЗрдкреЛред

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

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

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЕрдореВрд▓реНрдп рдореВрд▓реНрдп рд╣реИред
рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдкрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдк 'use non-null' рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпреЛрдВ рд╣реИрдВ?
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ 'use non-null' рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрд╣ рдереЛрдбрд╝рд╛ ... рдЕрдЬреАрдм рд╣реЛрдЧрд╛)
рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдирдП рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрджрд┐ рдЖрдк рдЙрд╕ рдмрд╛рдд рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ !string|null рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рддреЛ рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдирд▓ рдХреЛ {} рдЬреИрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ (рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдерд╛)ред рдпрджрд┐ рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ | рдирд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реВрдиреНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд▓ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд╡рд▓ рдпреВрдирд┐рдпрдиреЛрдВ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ! рдФрд░ рдХреЛрдИ рднреА рдХреЛрдИ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдЖрдк 3 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  • !sting : string - null - undefined
  • string : string | null | undefined
  • ?string : string | null | undefined

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

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

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

рдлрд┐рд░ рд╕реЗ рдЖрдк 'use non-null' рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпреЛрдВ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдпрд╣ рдореБрдЭреЗ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рд▓рдЧрддрд╛ рд╣реИред

@fdecampredon
рдХреНрдпреЛрдВрдХрд┐ "рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рднрд╛рд╖рд╛ _ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рднрд╛рд╖рд╛ _рд▓рд┐рдЦрд┐рдд_ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ _used_ рд╣реЛред рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ 1-3 рдлрд╛рдЗрд▓реЗрдВ рджреВрд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЧрд▓рдд рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдмреАрдЪ рдореЗрдВ рдЕрдВрддрд░:
string
рддрдерд╛
?string
рд╣реИ рдХрд┐ ? рддрдерд╛ ! рдкреНрд░рддреАрдХ рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХрд╛ "рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдЕрд╢рдХреНрдд" рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐-рдЪрд░ рдЖрдзрд╛рд░ рдкрд░)ред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдПрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрдкрдХреЛ рдЬреНрдпрд╛рджрд╛ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЕрдВрддрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реИ:
рдлрд╝рд╛рдЗрд▓ 1:

//...187 lines of code down...
string myfoo(checker: boolean) {
    if(checker){
        return null;
    }
    else {
        return "hello";
    }
}

рдлрд╝рд╛рдЗрд▓ 2:

"use nonnull"
//...2,748 lines of code down...
string myfoo(checker: boolean) {
    if(checker){
        return null; //Error!
    }
    else {
        return "hello";
    }
}

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдм рдорд╛рдирд╕рд┐рдХ рдирдХреНрд╢рд╛ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдЕрд╢рдХреНрдд рд╣реИрдВ рдФрд░ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ (рднрд▓реЗ рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ _your_ рдХреЛрдб 'рдЙрдкрдпреЛрдЧ рдЕрд╢рдХреНрдд' рд╣реЛ)ред

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ

  • рдлрд┐рд░ рд╕реЗ 'use strict' рд╕рд╛рде рдРрд╕рд╛ рд╣реА рд╣реИред
  • рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИред рдФрд░ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд░рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВред
  • рдпрджрд┐ рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдмрдврд╝рд┐рдпрд╛ рдорд╛рдорд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдЙрд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рд╡рд╣ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ ...

рдлрд┐рд░ рд╕реЗ рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

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

  • рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ var mystring = "string" рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛
  • рдЖрдк рд╣рд░ рдЬрдЧрд╣ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ:

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

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХ рдмрд┐рдВрджреБ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рд░рдЦреЗрдВ

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

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдЧреИрд░-рдирд▓ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд╢рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ string рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ string | null | undefined рдмрд┐рдирд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдП, рд╕реНрдкрд╖реНрдЯред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдЬреЛ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЕрд╢рдХреНрдд рд╣реИ рдпрд╛ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 'рдЧреИрд░-рд╢реВрдиреНрдп' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдФрд░ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЗрддрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЬрдм рдЖрдк рдХреЛрдб рдХреА 500 рд╕реЗ рдХрдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрд╕рдВрдЦреНрдпрдХ рдорд╛рдорд▓рд╛ рд╣реИ ...)

рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рд╡рд╣ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЖрдк рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рд╣рд╛рдБ, рдпрджрд┐ рдпрд╣ рдПрдХ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ 'рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ' рдЪреАрдЬрд╝ рддрджрдиреБрд╕рд╛рд░ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рдПрдЧреА, рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВ ...

рдПрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди 2 рдпрд╛ 3 рдкрд░рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрднреА рднреА рд╕рд╣реА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд╛рдЗрдк-рдЕрдиреБрдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ "рдиреЙрдирдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдирд╣реАрдВ рд╣реИ)ред

рдореИрдВ рдпрд╣рд╛рдБ рдЖрдкрдХреА рдмрд╛рдд рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБред

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

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

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

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

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣рд╛рдБ 3 рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

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

рд╡реИрд╕реЗ, рдЭрдВрдбрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

function fn(x: string): number;
function fn(x: number|null): string;

function foo() {
    return fn(null);
}

var x = foo(); // x: number or x: string?

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

  1. string|null|undefined рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрдкрд╖реНрдЯ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
  2. рдлрд┐рд░ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _рдкрд┐рдЫрд▓реА рд╕рдВрдЧрддрддрд╛ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛_ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕реЗ рдЕрдиреНрдп рджреЗрд╡ред рдФрд░ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪреМрдбрд╝рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. рдореИрдВ рдмрд╣реБрдд рд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рдмрдирд╛рддрд╛; рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рдиреЙрдирдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рд╣реИ? рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ 100 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрди 100 рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди-рд╕реА рдЕрд╢рдХреНрдд рд╣реИ? (рдпрд╛, _рд╣рд░ рдмрд╛рд░_ рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рдЪрд░/рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛?)
  4. рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВред
  5. рддреБрдо рдХрд╣рд╛рдБ рд░реБрдХрддреЗ рд╣реЛ? рдЖрдк рдЗрд╕реЗ рдХрд╣рд╛рдБ рдмреБрд░рд╛ рдХрд╣рддреЗ рд╣реИрдВ? рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдХреАрд╡рд░реНрдб рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред "рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐

    1. рдЙрд╕ рд╕рдордп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЛрдИ рдмрдбрд╝рд╛ рд╕реБрдкрд░-рд╕реЗрдЯ (рдЬреИрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ рдЬреЛ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рд╡рд╣ рдЪрд╛рд╣рддрд╛ рдерд╛ред

    2. рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ

      "рдпреВрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдХреНрдЯ" рдХреЛ _рдирд╣реАрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд░рдирд╛ рд╕рд╣реА рдерд╛_ рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдерд╛ рдЬрд┐рд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорд╛рдВрдЧреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рдереЗред рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ 1 (рдлрд┐рд░ 2, рдлрд┐рд░ 3 рдлрд┐рд░ 4) рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реЛрдЧреА, рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдЬреЛ _рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ_ рдХреБрдЫ рдордирдорд╛рдиреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдордирдорд╛рдиреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ "рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдерд╛ (рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓/рд╕реНрдХреЛрдк рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА)ред

  6. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ "рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА" рдирд╣реАрдВ рд╣реИ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ "рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА" рдирд╣реАрдВ рд╣реИред рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА "рдЧреИрд░-рд╢реВрдиреНрдп" рд╣реИред рдпрд╣ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
File 1:
"use notnull"
export string foo() {
    return "mygeneratedstring";
}
File 2:
export string foo() {
    return file1.foo()
}
File 3:
"use notnull"
file2.foo(); //???

рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддреЗ рд╣реИрдВ! рдореИрдВ рдРрд╕реА рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЖрд╢рд╛ рдирд╣реАрдВ рд░рдЦрддрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред


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

@spion
рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдирд┐рд╣рд┐рдд рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ --noImplicitNull рдзреНрд╡рдЬ рдЪрд╛рд▓реВ рд╣реИ)

рд╕реНрдЯреНрд░рд┐рдВрдЧ | рдирд▓ | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ var myString: string рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ var myString: (string | null | undefined); рдФрд░ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рди рд╣реЛрдВред

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

рдореИрдВ рдмрд╣реБрдд рд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рдмрдирд╛рддрд╛; рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "рдиреЙрдирдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рд╣реИ? рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ 100 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрди 100 рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди-рд╕реА рдЕрд╢рдХреНрдд рд╣реИ? (рдпрд╛, рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рдЪрд░/рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛?)

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

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

рднрд╛рд╖рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рд░реЗрдЯреНрд░реЛ рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 'рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ' рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдареАрдХ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рд╣рдо рдЕрднреА рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХрдореЛрдмреЗрд╢ es6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) .

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдп рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреА рддрд░рд╣ рдореИрдВ рдЗрд╕ рддрдереНрдп рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдк рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ null рдПрдХ рдЪрд░ рдХрд┐ рдкрд╣рд▓реЗ рдерд╛ string рдЖрд╕рд╛рдиреА рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк 5 рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдерд╛ред
рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪреЗрдХрд░ рд╣реИ, рдЬреЛ рдХрд┐ null рдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдорд╛рдирддрд╛ рд╣реИ рди рдХрд┐ 5 ред

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

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

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @spion рд╡рд┐рдЪрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛ string рдПрдХ рдирд┐рд╣рд┐рдд рд╢реВрдиреНрдп number | null рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рдЕрдзрд┐рднрд╛рд░ рдкрд░ рд╡реНрдпрд╛рдкрдХрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛрдиреЛрдВ рдореЗрдВ рдорд╛рдорд▓рд╛ foo(null) рд╣реЛрдЧрд╛ string ред

@RyanCavanaugh рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@fdecampredon

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

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

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

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

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

@fdecampredon

рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдпрд╣ рдерд╛

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

рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП @RyanCavanaugh рдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдФрд░ --noImplicitNull рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рдиреЗ рдкрд░ рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛:

рдЬрдм рднреА рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдзрд┐рднрд╛рд░ рдореЗрдВ |null (рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣) рд╣реЛрддрд╛ рд╣реИ:

function fn(x: string): number;
function fn(x: number|null): string;

рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдзрд┐рднрд╛рд░ рд▓реЗрдЧрд╛ рдФрд░ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЙрд╕ рддрд░реНрдХ рд╕реНрдерд┐рддрд┐ рдкрд░ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдирдП рд░реВрдкреЛрдВ рдХреЛ рдмрдирд╛рдпреЗрдЧрд╛:

function fn(x: string): number;
function fn(x: number|null): string;
// implicit signature added at the end, caused by the first overload
function fn(x: null): number;

рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдЦреНрдд --noImplicitNull рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ: рдЬрдм рдПрдХ рд╢реВрдиреНрдп рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рдорд┐рд▓рд╛рди рдЕрдзрд┐рднрд╛рд░ рд╕реНрдкрд╖реНрдЯ number|null ред рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд▓ рдХреЛ рдирд┐рд╣рд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдордЬрдмреВрдд рдмрдирд╛рддрд╛ рд╣реИред

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

рдЗрд╕ рддрд░рд╣ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрдд рдФрд░ рдСрдкреНрдЯ-рдЗрди рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдмрд╛рдХреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

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

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

рд╕реНрдкрд╖реНрдЯ рдЕрд╢рдХреНрдд рд╕рдВрдШ рджреЛрдиреЛрдВ рдореЛрдб рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рдВрдШ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВрдиреЗ рдЕрднреА рдКрдкрд░ _all_ рдХрдореЗрдВрдЯреНрд╕ рдкрдврд╝реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдпрд╣ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдЗрддрдиреА рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ 5 рдорд╣реАрдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрднреА рднреА рдЙрдиреНрд╣реАрдВ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рдЭрдВрдбреЗ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдмрдбрд╝реЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдирд▓ рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рддрд░реНрдХ рджрд┐рдП рд╣реИрдВред рдореИрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ (рд▓реЗрдХрд┐рди +1)ред

рдЕрдм рддрдХ рдореБрдЦреНрдп рдмрд╣рд╕ рдореМрдЬреВрджрд╛ TS рдХреЛрдб рдФрд░ TS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЯрди рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╣реА рд╣реИред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдФрд░ рдлреНрд▓реЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ ?string рд╕рдмрд╕реЗ рд╕рд╛рдл рдФрд░ рд╕рдмрд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ string рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП _all_ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ _рд╡рд┐рд╢рд╛рд▓_ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

рдЗрд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ ( @RyanCavanaugh рдиреЗ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдмрдирд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рд╣реИ) рдпрд╛ рдкреНрд░рддрд┐-рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╣реИрдХрд┐рд╢ рд╕реНрдЯреЙрдк-рдЧреИрдк рдЙрдкрд╛рдп рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдореАрдХреНрд╖рд╛ рдпрд╛ рд╡рд┐рд╢рд╛рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХреЛрдб рдкрдврд╝рдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдЕрд░реНрде рддреБрд░рдВрдд рдЬрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред 'use strict'; рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ TS рдХреЛ JS рдХреА рдкрд┐рдЫрд▓реА рдЧрд▓рддрд┐рдпрд╛рдБ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдиреЙрдЯ рдирд▓" рдПрдиреЛрдЯреЗрд╢рди ( string! , !string , ...) рдЬрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрд░реНрдХ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛: рд╢рд╛рдпрдж рдпрд╣ рд╣реИ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВред

рдХреЛрдИ рднреА рдкреВрд░реЗ рдХреЛрдб рдореЗрдВ рдмреИрдВрдЧреНрд╕ ( ! ) рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╢рд╛рдпрдж рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред TS рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдмрддрд╛рддрд╛ рд╣реИред

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

var x: string;  // Nullable
x.toString();  // Error: x can be undefined or null
x = "jods";
x.toUpperCase();  // Fine.
notNull(x);  // Fine

рдЕрдХреНрд╕рд░ рдореИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

var x = "jods";  // x: string (nullable)
notNull(x);  // Fine
x = null;  // Fine
notNull(x);  // Error

2. рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕реА рдорд╛рди
рдмрд╣реБрдд рдмрд╛рд░ рдореИрдВ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЬреИрд╕реЗ рд╣реА TS рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред

function() /* : string! */ {
  return "jods";
}

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

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

function f() : string {  // f is nullable although this implementation never returns null.
  return "abc";
}

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

function (x: string!) { return x.toUpperCase(); } // OK
function (x: string) { return x.toUpperCase(); } // Error

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

4. рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░
рдпрд╣ 3 рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛ рдкрд░ рдЗрд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

class C {  x: string!; }

function(c: C!) // : string! is inferred
{ return c.x; } // OK, but annotations are required

рд╣рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

class C {
  x! = "jods"; // Note the bang: x is inferred as !string rather than just string.
}

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

5. рдШреЛрд╖рдгрд╛рдПрдВ, .d.ts
рдмрдбрд╝рд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реВрдиреНрдп рдФрд░ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рд╢реВрдиреНрдп рдирд╣реАрдВ" рдкрд░ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╡реЗ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

var a: { s: string } = something(); // Notice s is nullable.
notNull(a.s); // Error
notNull(<!>a.s);  // OK, this is a shorthand "not-null" cast, because the dev knows about something().

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

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

рдЖрдкрдиреЗ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ @jods4 рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рдФрд░ рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ:

2) рдпрджрд┐ рд╕рдВрдХрд▓рдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЕрд╢рдХреНрдд рдХреЛ рдЧреИрд░ рдЕрд╢рдХреНрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)?

3 рдФрд░ 5) рдпрджрд┐ рд╕рдВрдХрд▓рдХ рдЕрд╢рдХреНрдд рдХреЛ рдЧреИрд░ рдЕрд╢рдХреНрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдПрдХ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдм рдПрдХ d.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

6) рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмреИрдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ/рджрд┐рдЦрддрд╛ рд╣реИ?

2) рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд (рдпрд╛ 'рдкреНрд░рддрд┐рдирд┐рдзрд┐') рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЬрд╣рд╛рдВ рдореИрдВ рдЯреАрдПрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд▓рдЧрднрдЧ рдХрднреА рднреА рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЯреАрдПрд╕ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рд╢реВрдиреНрдп/рд╢реВрдиреНрдп рднрд╛рдЧ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИред

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

рдЖрдЗрдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдмрджрд▓реЗрдВ: рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп _not_ рдЕрдиреБрдорд╛рдирд┐рдд рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдиреБрдмрдВрдз рдкрд░ "рд╢реВрдиреНрдп рдирд╣реАрдВ" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

3 рдФрд░ 5) рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рдХреЛрдб рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдп рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдм рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

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

var x: number | string!; // compiler error
var x: number | string; // x can be null
var x: number! | string!; // x cannot be null
function f<T>() : number | T; // f can be null
function f<T>() : number! | T; // f is nullable if T is nullable
function f<T, G>(): T | G; // f is nullable if T or G is nullable
function f<T>(): T | null; // f is nullable even if T is not nullable.
function f<T>(): T!; // Whatever T is, f never returns null.

// Generics constraint option 1
function f<T!>(x: T!, y: T): T!; // T: not nullable type, x: not-null, y: null, f: not-null
function f<T!>(x: T!, y: T): T;  // T: not nullable type, x: not-null, y: null, f: null

// Generics constraint option 2
function f<T!>(x: T, y: T | null): T; // same as option 1.1
function f<T!>(x: T, y: T | null): T | null;  // same as option 1.2

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

рдЯрд╛рдЗрдк рдЕрдХреНрд╖рд░ рдареАрдХ рд╣реИрдВ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рдВрддреЛрд╖рдЬрдирдХ рдирд╣реАрдВ рд╣реИрдВ: var x: { name: string }! , рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рд╡реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлреИрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ :(

рдФрд░ рдЬреНрдпрд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг:
рдЕрд╢рдХреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рд░рдгреА number![]
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╢реВрдиреНрдп рд╕рд░рдгреА рдирд╣реАрдВ: number[]!
рдХреБрдЫ рднреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛: number![]!
рдЬреЗрдирд░рд┐рдХ: Array<number!>[]

2, 3 рдФрд░ 5) рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
6)

function f<T>() : number | T; // f can be null
function f<T>() : number! | T; // f is nullable if T is nullable

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ f рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ f рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдк рд╣реИ? (рдереЛрдбрд╝рд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд/рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

var x = ! & number | string;

рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рди рддреЛ рдЕрд╢рдХреНрдд рд╣реИрдВред


рдЯрд╛рдЗрдк рд▓рд┐рдЯрд░рд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рд╢рд╛рдмреНрджрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдВрдд рдореЗрдВ рднреА рдзрдорд╛рдХрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ var x: !{name: string} , рдЕрдВрдд рдореЗрдВ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

@ jods4 рдХреНрдпрд╛ рдЖрдкрдиреЗ рдореЗрд░реЗ "рд╕реНрдкрд╖реНрдЯ рдирд▓ рдХреА рдирд┐рд╣рд┐рдд рдирд▓ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛" рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдореБрджреНрджреЗ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ
рд╣рд╛рдВ, "рд╢реВрдиреНрдп рд╣реИ" "рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ" рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд╢рдмреНрдж рдерд╛ред

рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ function f() {} рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ f рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдХреНрдпрд╛ рд╣рдо рдпрд╣ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ f рдХрднреА рднреА рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ ? function f!() {} ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рджреВрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдХреЛ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣ рд╡реИрд╕реЗ рднреА рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред

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

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

class C {
  name! = "jods";  // Field inferred string, but marked not nullable.
  // Maybe we could do that instead, which works with "!T" convention:
  name : ! = "jods";
  // That kind of make sense with the proposed <!> cast.
}

@spion
рд╣рд╛рдБ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рддреЛ рдЖрдкрдХреА рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрдзрд┐рднрд╛рд░ fn(null) ? рд╡рд╣ 'рдЬреЗрдирд░реЗрдЯ' рдЬреЛ number рд▓реМрдЯрд╛рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЕрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ рдУрд╡рд░рд▓реЛрдб рднреА null рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди string ? рдпрд╛ рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдУрд╡рд░рд▓реЛрдб рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд▓реЗрдЧрд╛, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ!

@jods4

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

function fn(x: string): number;
function fn(x: number|null): string; 

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

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

@spion
рддреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд function fn(x: null): number; рд╕рд╛рде рдХреНрдпрд╛ рдорд╛рдорд▓рд╛ рдерд╛? рдпрджрд┐ рджреВрд╕рд░рд╛ рдЕрдзрд┐рднрд╛рд░ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХрд┐рд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреВрд░реЗ "рдлрд┐рдХреНрд╕" рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ?

рдЕрдиреНрдп рдкреНрд░рд╢реНрди: рдЖрдЬ рд╕рднреА lib рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рд╢реВрдиреНрдп рдЕрдиреБрдордд" рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рддреЛ рдЬрдм рддрдХ рд╡реЗ _all_ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ, рдореБрдЭреЗ "рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп" рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде, рдореИрдВ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ?

// null by default flag turned on because of 3rd party libs.
function (x: string)   // <- how do I declare this not null?
{ return x.toUpperCase(); }

рдлрд┐рдХреНрд╕ рдХрд╛ рдЕрд╕рд░ рдЬрд░реВрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

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

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

declare function wordCount(s: string): number;

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

function sumWordcounts(s1:string, s2:string) {
  return wordCount(s1) + wordCount(s2);
}

рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЛрдиреЛрдВ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ: рднрд▓реЗ рд╣реА рдирд┐рд╣рд┐рдд рдирд▓ рдЕрдХреНрд╖рдо рд╣реЛрдВред рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИред

рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рднрд▓реЗ рд╣реА рд╡реЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред

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

рдЕрдм wordCount . рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ

function wordCount(s) {
  if (s == '') return null;
  return s.split(' ').length
}

рдУрд╣, рдпрд╣ рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рдХрд╣рд╛рдиреА рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИред рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

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

noImplicitNull рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╣рдо рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ред рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢рд┐рдХрд╛рдпрдд рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрднреА рднреА рдЦреБрд╢реА рд╕реЗ рд╕реЛрдЪреЗрдЧрд╛ рдХрд┐ рд╡рд░реНрдбрдХрд╛рдЙрдВрдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдкреБрд░рд╛рдирд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрдЧрд╛ рдХрд┐ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рди рд╣реА рдирдпрд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ)ред рдФрд░ рдЕрдЧрд░ рд╣рдо рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред (1)

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдм рд╣рдо рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ: рд╣рдо рд╡рд░реНрдбрдХрд╛рдЙрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:

declare function wordCount(s:string):string|null;

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

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


(1): рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдП рдмрд┐рдирд╛ рднреА рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИред рдирдИ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЬрдм рдЖрдк wordCount рдлрд╝рдВрдХреНрд╢рди .split() рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЧрд▓рддреА рд╕реЗ sumWordcounts рд╢реВрдиреНрдп рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

sumWordcounts(null, 'a'); // error after the change

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

рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдЕрднреА рднреА рдареАрдХ рд░рд╣реЗрдВрдЧреА:

declare function f(a: string, b?:string); 

рд▓реЗрдХрд┐рди рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

declare function f(a: string, b:string); // a can actually be null

рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рд╡реЗ рдХрд╛рд░реНрдп рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реБрдзрд╛рд░ рдиреНрдпреВрдирддрдо рд╣реЛрдВрдЧреЗред

@spion

рдлрд┐рдХреНрд╕ рдХрд╛ рдЕрд╕рд░ рдЬрд░реВрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИред

рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдкрдиреЗ рдпрд╣ рднреА рдХрд╣рд╛:

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

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

рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЛрдиреЛрдВ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ: рднрд▓реЗ рд╣реА рдирд┐рд╣рд┐рдд рдирд▓ рдЕрдХреНрд╖рдо рд╣реЛрдВред рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИред

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

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

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

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рднрд╛рд╡реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрд╢рдХреНрдд (рдпрд╛ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЪрд░ рдЫреЛрдбрд╝рдХрд░) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, "рдЙрдкрд░реЛрдХреНрдд рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ ...

рдЖрдкрдХреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрдд рдХреЛ рдкрдврд╝рдХрд░, рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рд╕реНрд╡рд┐рдЪ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╢реВрдиреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рддрдм рддрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрдм рддрдХ рдХрд┐ _all_ рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАрдВред :(

рдЖрдо рддреМрд░ рдкрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдХреИрд╕реЗ рд╕рдм рдХреБрдЫ рд╕рд┐рд░реНрдл рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдВрдЧреЗред

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

рдлрд╝рдВрдХреНрд╢рди yes(): string! рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╛рди рд▓реЗрдВ рдЬреЛ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ no(): string? рдЬреЛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

.d.ts рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ:

declare function yes(): string;
declare function no(): string;

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

рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрд╢реЛрдзрдХ ! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

function x(s: string!) {  // inferred : string, could be explicit if we want to
  return s.length === 0 ? null : s;  // no error here as s is declared not null
}

x(no());  // error: x called with a possibly null parameter
y(<!>yes());  // no error because of not null cast. When .d.ts is updated the cast can be dropped.

рдпрд╣ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ (130 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ!)

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

@spion рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЭрдВрдбреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЯреАрдПрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдзреНрд╡рдЬ рд╕реЗрдЯ рдФрд░ рдЕрдирд╕реЗрдЯ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ !T рдиреЙрдЯ-рдирд▓ рдорд╛рд░реНрдХрд░ рдХрд╛ рд╕рд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://gist.github.com/jods4/cb31547f972f8c6bbc8b

рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдВрддрд░реЛрдВ рдХреЗ рд╕рд╛рде:

  • рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ ' рдиреЙрдЯ -рдирд▓' рдкрд╣рд▓реВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрд╕ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП
  • рдореИрдВрдиреЗ @Griffork рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдореИрдВрдиреЗ !T рдмрдЬрд╛рдп T! ред
  • рдореИрдВрдиреЗ рдХреБрдЫ рдЦрдВрдб рдЬреЛрдбрд╝реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдмреЗрдЭрд┐рдЭрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, рдлреЛрд░реНрдХ рдХрд░реЗрдВ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдПрдВ ( ?T )ред
рдЖрдЗрдП рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

@jods4

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

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

  1. рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЭрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рд╕рдВрдХрд▓реНрдк рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

  1. рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ number! рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ number ред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдУрд╡рд░рд▓реЛрдб рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд▓ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред

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

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, "рдЙрдкрд░реЛрдХреНрдд рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ ...

рдЖрдЗрдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

function sumWordcounts(s1:string, s2:string) {
  return wordCount(s1) + wordCount(s2);
}

рдирдП рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдХреЗ рддрд╣рдд рдЖрдк рдЗрд╕реЗ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдЬреИрд╕реЗ sumWordCounts(null, null); рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ wordCounts рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╣рддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИред

рдЖрдкрдХреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрдд рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХреЛ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╢реВрдиреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рддрдм рддрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреА рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАрдВред :(

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

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


рдареАрдХ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ

declare function yes(): string;
declare function no(): string;

рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдлреАрдЪрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХрд╛ рдХреЛрдб рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:

function x(s: string) {
  return s.length === 0 ? null : s;
}

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

x(no());  // no error
x(yes());  // no error

рдЬрдм рддрдХ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ x() рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рддрд░рд╣ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

x(x(no())) // error, x(something) may be null

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

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

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

рдЬрдм рд╣рдо T рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдЫ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╢реВрдиреНрдп рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдкреНрд░рдХрд╛рд░ T рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд░ T|null ред

рдЬрдм рд╣рдо T рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд░ T рдФрд░ рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ T рдХреЛ рд╣рдореЗрд╢рд╛ T|null рд░реВрдк рдореЗрдВ рдорд╛рдирдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ; рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ T ред рджреЛрдиреЛрдВ рд╢рдмреНрджрд╛рд░реНрде рдмрджрд▓рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рд╕рдВрдХрд▓рдХ рдХреЛ "рд╕рд╣реА рдврдВрдЧ рд╕реЗ" рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ

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

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

@spion

1. рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЭрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рд╕рдВрдХрд▓реНрдк рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

1.рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ number! рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ number ред

рдпрд╣ рдЧрд▓рдд рд╣реИ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрд▓рдЧ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╕рдорд╛рди рд╣реИрдВред рдЬрдм рдореИрдВ number! рдХрд╣рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЗрд╡рд▓ number ред рдФрд░ рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ number рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ number | null ред

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

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

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

рдмрд╣реБрдд рдмрд╣рд╕ рдпреЛрдЧреНрдпред

рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдХрд╛рд░реНрдп рд╣реИрдВред

рдФрд░ рднреА рдмрд╣рд╕ рдпреЛрдЧреНрдпред рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред

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

рдЕрдзрд┐рдХ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдПрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк declare function(x: {}); рдЕрдВрджрд░ рдпрд╛ interface рдЕрдВрджрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХреЛ "рдкрд╣рдЪрд╛рди" рдХреИрд╕реЗ рджреЗрдВрдЧреЗ?

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдп рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

рдлрд┐рд░ рд╕реЗ рдмрд╣реБрдд рдмрд╣рд╕ рдпреЛрдЧреНрдпред рдХрдИ рдлрд╝рдВрдХреНрд╢рди null рдпрд╛ undefined рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ: find (рдЬрдм рдЖрдЗрдЯрдо рдирд╣реАрдВ рдорд┐рд▓рд╛), getError (рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рди рд╣реЛ) рдФрд░ рдЗрд╕реА рддрд░рд╣ ... рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдорд╛рдирдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреАрдЖрдИ рджреЗрдЦреЗрдВ, рдЖрдкрдХреЛ _plenty_ рдорд┐рд▓реЗрдЧрд╛ред

рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╕рд╣реА рд░рд╣реЗрдВрдЧреАред

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

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

рдЗрд╕ рд╕рдордп рдпрд╣ рдХрдерди рдореБрдЭреЗ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЦрд╛рд╕рдХрд░ _рдкреНрд░рдЧрддрд┐рд╢реАрд▓_рднрд╛рдЧред

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

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

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

  • рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рднреА рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд╢рдХреНрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓рд╛рдн рдорд┐рд▓реЗрдВрдЧреЗ (рдХрд╛рдлреА рддрд░рд╣ рд╕реЗ рдЖрдк рдлреНрд▓реЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ)ред
  • рдПрдХ рдЪреАрдЬ рдЯреВрдЯ рдЬрд╛рдПрдЧреА: рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рд╕реЗ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
declare function f(): string; // existing declaration, but f will never return null.
var x = f();
x.toUpperCase();  // error, possibly null reference.

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕реБрдзрд╛рд░ рд╣реИ: declare function f(): !string;
рд╢реЙрд░реНрдЯ-рдЯрд░реНрдо рдлрд┐рдХреНрд╕ рдПрдХ рдиреЙрдЯ-рдирд▓ рдХрд╛рд╕реНрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реИ: var x = <!>f(); ред
рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╡рд╛рд▓реА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ "рдХреЛрдИ рдирд┐рд╣рд┐рдд рдХреЛрдИ рдирд╣реАрдВ" рдХреЗ рд╕рдорд╛рди рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдирд╛: "рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╢реВрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░реЗрдВ"ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдирдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдкрдбреЗрдЯ рди рд╣реЛ рдЬрд╛рдПред рдиреЛрдЯ: рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рдзреНрд╡рдЬ рд╕рдВрдХрд▓рдХ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣реА рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЗрд╕ 130+ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛рдПрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ _рд╕рд╛рдорд╛рдиреНрдп_ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред

рдЯреАрдПрд╕ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдирдП рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдПрдХрд▓ рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдореИрдВрдиреЗ !T рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #1800 рдмрдирд╛рдпрд╛ред

@spion рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВред

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

@ jods4 рдореБрдЭреЗ рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд╢рд╛рдпрдж рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЗрдЯреНрд░реЛрдХрдВрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЬреЛ рдорд╛рдиреНрдп рд╣реИ 1.4 ts рдЖрдкрдХреЗ рд╕рд╛рд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдо рдХреЗ рддрд╣рдд рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред
рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИ, рдФрд░ 130 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ+ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ 2 рд╕рдореВрд╣ рд╣реИрдВ:

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

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

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

рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИ ...

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

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

рдЕрднреА рдЖрдк рдЗрд╕реЗ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

declare function err():string;

рд╢реВрдиреНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЦреБрд╢реА рд╕реЗ err().split(' ') ред рдЖрдк рдпрд╣ рдХрд╣рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВ рдХрд┐ "рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛"ред

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдЖрдк string рдХреЛ ?string рдпрд╛ string|null рдмрджрд▓рдХрд░ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ _рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрддреЗ_ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрджрд▓рд╛рд╡ рд╕реЗ рдкрд╣рд▓реЗ рдерд╛:

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

рдЕрдВрддрд░ рдпрд╣ рд╣реИ: рдЖрдк рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рдХреЛ рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЖрдк _can_ рдХреЗ рдмрд╛рдж (рдЙрддреНрддрд░реЛрддреНрддрд░, рдкрд╣рд▓реЗ рдЙрди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдкрд░ рдЬрд┐рдирдХреА рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░)

@fdecampredon рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЧрд▓рддрдлрд╣рдорд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдХрд┐рддрдирд╛ "рдХрдард┐рди" рдФрд░ "рд╕рдЦреНрдд" рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЦрддреНрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рдХрд╛рдВрдЯреЗ рдореЗрдВ --noImplicitNull рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдЕрдЧрд▓реА рдЕрд╡рдзрд┐ рдореЗрдВ рд╕рдордп рдвреВрдВрдв рдкрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ , рдпрд╣ рдПрдХ рдордЬреЗрджрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@spion , рдореИрдВ рд╕рднреА рдирд▓ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдирд▓ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЙрд╕ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?

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

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

@spion
рдЖрдкрдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдореБрдЭреЗ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛, рд╡рд╣ рдЙрд╕рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдордЭрд╛ рдерд╛ ...

рддреЛ : string "рдЖрдкрдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдХрднреА рднреА рд╢реВрдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ <any> рдХреЛ рдХрднреА рднреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ"ред

рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ : string | null рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрд┐рдирд╛ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред

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

рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрдирдкреБрдЯ рд╡реИрд▓реНрдпреВ (рдЬреИрд╕реЗ рдлрдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░) рдкрд░ рдмрд╛рдзрд╛ рдХреИрд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ:

declare f(x: string): void;
f(null);

рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ? рдЕрдЧрд░ рдпрд╣ рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

@jods рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА:

declare f(x: string): void; //string must not be null.
declare f(x: string|null): void; //string may be null (not sure about undefined here).
declare f(x?: string): void; //I assume x may be null or undefined.

@ jods4 рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдлрд┐рд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ 10 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╣реБрдЖ рд╣реИ / 10 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ . рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдЕрдкрдиреЗ рдкрд░рд┐рдЪрдп рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬреЛ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдЙрд╕реЗ рд╡реЛрдЯ рджреЗрддрд╛ рд╣реИред

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ
рд▓реЗрдХрд┐рди рдЬрд╛рджреВ рдХреЗ рдЭрдВрдбреЗ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА, рд╣реИ рдирд╛?
рддреЛ рдлреНрд▓реИрдЧ рдСрдл рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЛрдб рд╣реИ, рдирдП рдирд▓рдмрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рдереЗ; рдлрд┐рд░ рдЬрдм рдЖрдк рдзреНрд╡рдЬ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

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

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдпрд╣ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ (рдПрдХ рдмрд╛рд░ .d.ts рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж) рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИред

@ рдЗрд╕ рдПрдХрд▓ рдореБрджреНрджреЗ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рдВрдмреЗ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛

@spion рдХреЗ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ рдЬрд╛рджреБрдИ рдЭрдВрдбрд╛ рдирд╣реАрдВ рдерд╛ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдпрд╣ рдПрдХ рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡ рдерд╛ред

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреЛрдИ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рд╡рд╣ рд╕рдм рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╣ рд╕рдм рдирд╣реАрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ) _then_ рд╣рдо рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдЗрд╕рдХрд╛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╡рд░рдг рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рд╣рдо рд╕рднреА рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ ред
рдПрдХ рд╣реА рд╡рд┐рд╖рдп, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╖рдп рдирд╣реАрдВред
рд╕рд╛рд░реА рдмрд╛рддрдЪреАрдд рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рднреА рдЬрд╡рд╛рдм рди рджрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рджрдм рдЬрд╛рддрд╛ рд╣реИред

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

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ @ jods4 рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рддреЗ рд╣реИрдВред

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

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ "рдЕрдкрдЧреНрд░реЗрдб" рдкреНрд░рдХреНрд░рд┐рдпрд╛ @jods4 рдФрд░ @spion рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рддрд░рд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реНрд▓реИрдЧ рдЪрд╛рд▓реВ рд╣реИ):

function a(arg1: string): string;
a("mystr").toLowerCase(); //errors in <strong i="11">@jods4</strong>'s proposal because a may return null.
a("mystr").toLowerCase(); //fine in <strong i="12">@spion</strong>'s proposal.

a(null).toLowerCase(); //fine in <strong i="13">@jods4</strong>'s proposal because a may accept null.
a(null).toLowerCase(); //errors in <strong i="14">@spion</strong>'s proposal since a doesn't accept null.

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

рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИрдВ:

  • рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореБрдЭ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВ:
var s: string;
s.toUpperCase(); // error
var t = (s || "test").toUpperCase(); // ok. Inferred t: string
yes(t);  // ok
t = no();
yes(t);  // error

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдореИрдВрдиреЗ рдирд╣реАрдВ () рдХрд╣рд╛, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВред

  • Nullables рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рддреАрдХ рдХреЗ рдмрдЬрд╛рдп рдЕрд╢рдХреНрдд рд╢рдмреНрдж рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛ рдХрдо рд╣реЛрддрд╛ рд╣реИред рд╕рдЪ рдореЗрдВ ! "рдирд╣реАрдВ" рдХреЗ рд▓рд┐рдП "рдирд╣реАрдВ-рд╢реВрдиреНрдп" рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рддреАрдХ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рдореИрдВ рд╕рдорд░реВрдкреЛрдВ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрднреА рдпрд╛рдж рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рдФрд░ рд╡реЗ рдореЗрд░реЗ рдХрд╛рдо рдХреА рдЧрддрд┐ рдХреЛ рдХрд╛рдлреА рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

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

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

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

@ jods4 рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдк-рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ

@spion рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ '-nonImplicitNull' рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде @RyanCavanaugh рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИ, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рд╣рдореЗрдВ рдХреЗрд╡рд▓ ?type type|null рдпрд╛ type|undefined рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреА рд╣реИ

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

@jods4

declare f(x: string): void;
f(null);

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд --noImplicitNull рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рд╛рдБ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

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

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

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

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

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдмрдирд╛рдо рдЗрд╕рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдЯреВрдЯрдиреЗ рдХреЗ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯреАрдПрд╕ рдЯреАрдо рдХрд╛ рд░реБрдЦ рдХреНрдпрд╛ рд╣реИред

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

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

:+1: рд╕рдордЭрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛: @RyanCavanaugh

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

рдЗрд╕ рддрд░рд╣ рдХреЛрдИ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЪреНрдЫреА рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдк рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдЕрдЪреНрдЫреА рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдерд╛рдУрдВ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдард╛рдП рдЧрдП рдмрдЧ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд┐рд░ (рдмрд╛рдж рдореЗрдВ рд╢рд╛рдпрдж?) рдЖрдк рдПрдХ --noImplicitNullCast рдзреНрд╡рдЬ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╢реВрдиреНрдп рдХреЛ рдЙрди рдЪрд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдзреНрд╡рдЬ рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде @spion рдХрд╛ рд╕реБрдЭрд╛рд╡)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ --noImplicitAny рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрд╣реБрдд рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ
рдкреИрдХреЗрдЬ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ (рдПрдХ null рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрд┐рдирд╛ рдЧрд╛рд░реНрдб рдХреЗ рдордирд╛ рдХрд░реЗрдВ) 100% рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЬрд┐рддрдирд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рддреЛрдбрд╝реЗрдВрдЧреЗред рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЛ:

рдЗрд╕ рдирдИ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрдИ lib defs рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╡реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓рддреЗ рд╣реИрдВред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:

interface Array<T> {
  find(predicate: (T) => bool) : T | null;
  pop() : T | null;
}
interface Storage {
  getItem(key: string) : any | null;
}

рдРрд╕реЗ рдХрдИ рдПрдкрд┐рд╕ рд╣реИрдВ: find рд░рд┐рдЯрд░реНрди undefined рдпрджрд┐ рдХреЛрдИ рд╕рд░рдгреА рддрддреНрд╡ рд╡рд┐рдзреЗрдп рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ pop рд░рд┐рдЯрд░реНрди undefined рдЕрдЧрд░ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ, localStorage.getItem рдпрджрд┐ рдХреБрдВрдЬреА рдирд╣реАрдВ рдорд┐рд▓реА рддреЛ sessionStorage.getItem рджреЛрдиреЛрдВ null рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

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

var xs: string[];
if (xs.length > 0) return xs.pop().trim();  // error xs.pop() may be undefined (false positive)

var items : { id: number }[];
var selectedId : number;
// Assume we are sure selectedId is amongst items
var selectedItem = items.find(x => x.id === selectedId);
selectedItem.toString(); // error selectedItem may be undefined (false positive)

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

рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА рдФрд░ рдпреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред 100 рдХреЗ + рдПрд▓рдУрд╕реА рдореЗрдВ рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХрд╛ рд╢рд╛рдпрдж рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЬреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд╡рд╣ рд╣реИ: рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдирдпрд╛ рдХреЛрдб рдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╢реВрдиреНрдп рдЬрд╛рдБрдЪ рдХрд╛ рдкреВрд░рд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рддрд╛ рд╣реИ; рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХрд╛ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк (--enableNullAnalysis) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреЛрдИ "рд╕рдВрдХреНрд░рдордг" рдпрд╛ "рдкреНрд░рдЧрддрд┐рд╢реАрд▓" рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкрде рдирд╣реАрдВ рд╣реИред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
@ jods4 рдЖрдкрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрдмрдХрд┐ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

2 рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк _some_ (рдЧрд▓рдд/рдЕрд╕реБрд░рдХреНрд╖рд┐рдд) рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдХрднреА рднреА рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдЕрднреА рднреА рдареАрдХ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛, рдпрд╣ рд╕рднреА рдЬрдЧрд╣ рдмрд╕ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

_рдирдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рд╡реИрд╕реЗ рднреА рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ред_

рдпреЗ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЕрд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рдо рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЬреЗрдиреЗрд░рд┐рдХ рдФрд░ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЛ lib.d.ts рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ lib.d.ts рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рдБ рд▓реЛрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдкреНрд░рдореБрдЦ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ)ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрднреА-рдХрднрд╛рд░ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛ (https://github.com/Microsoft/TypeScript/wiki/Breking-Changes) рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рдХрдо рдФрд░ рдмрд╣реБрдд рджреВрд░ рд╣реЛрдВрдЧреЗ, рдЕрдХреНрд╕рд░ рдЕрдЧрд░ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдХреЗрд╡рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ рджреЛрд╖ред

рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП lib.d.ts рдХреЛ рд╣рдореЗрд╢рд╛ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдбрд╝рдк рд╕рдХрддреЗ рд╣реИрдВ

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

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

JS рдореЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ undefined (рдпрд╛ рдХрднреА-рдХрднреА null ) рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ Array.prototype.pop ред рд╕реА # рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдвреЗрд░ рд╕реЗ рдкреЙрдкрд┐рдВрдЧ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рддреЛ рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡реИрдз рдорд╛рди рджреЗрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкреЙрдкрд┐рдВрдЧ undefined ред рдпрджрд┐ рдЖрдкрдХрд╛ рдЯрд╛рдЗрдкрд╕рд┐рд╕реНрдЯрдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЦреНрдд рд╣реИ рддреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

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

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

class MicroTasks {
  queue: Array<() => void>;

  flushQueue() {
    while (queue.length > 0) {
      let task = queue.pop();
      task();  // error possible null dereference (not!)
     }
  }
}

рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВред

рдЖрдкрдХреЗ рд╕рдВрдкрд╛рджрди 2 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рд╣рд╛рдБ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди _will_ рдмрдЧреНрд╕ рдХреЛ рдкрдХрдбрд╝реЗрдЧрд╛ рдФрд░ рдЕрдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╣реЛред рд▓реЗрдХрд┐рди TS рдЯреАрдо _valid_ рдХреЛрдб рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧреАред рдРрд╕реЗ рдЯреНрд░реЗрдб-рдСрдл рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@danquirk рдореЗрд▓рд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрднреА рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@ jods4 рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рдХреЛрдб рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛

рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рдХреНрдпрд╛ рдореБрдЭреЗ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╢рд╛рдпрджред

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

рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЧреИрд░-рджрдЦрд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):

  • null-typeguard рдкреНрд░рддреАрдХ ?<type> рдкрд░рд┐рдЪрдп рджреЗрдВ
    рдпрджрд┐ рдЗрд╕ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ

``` рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд╡рд░ рдлреВ: ?рд╕реНрдЯреНрд░рд┐рдВрдЧ;

foo.indexOf ('рдПрд╕'); // рддреНрд░реБрдЯрд┐
рдлреВ && foo.indexOf('s'); // рдареАрдХ
```

  • рдПрдХ рдЭрдВрдбрд╛ рдкреЗрд╢ рдХрд░реЗрдВ --nouseofunassignedlocalvar

``` рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд╡рд░ рдлреВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ;

foo.indexOf ('рдПрд╕'); // рддреНрд░реБрдЯрд┐

рдлреВ = 'рдмрд╛рд░';

foo.indexOf ('рдПрд╕'); // рдареАрдХ
```

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

  • рд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдСрдкрд░реЗрдЯрд░ #16 . рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ

TypeScript var x = { y: { z: null, q: undefined } }; console.log(x?.y?.z?.foo); // Should print 'null'

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

@ рдиреЛрдПрд▓ рдЕрдмреНрд░рд╛рд╣рдо :
рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рдЖрдк рдмрд╕ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рдмрдЬрд╛рдп |null ( lib.d.ts рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░

рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдкрд╣рд▓реЗ @RyanCavanaugh (рдКрдкрд░) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

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

рдореИрдВ рдХрд╛рдлреА рд╣рдж рддрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдПрдХ рдЭрдВрдбрд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ @RyanCavanaugh рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдХрд╛рд░рдг рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред

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

рдХреНрдпрд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд▓рдмрд▓реНрд╕ (рдФрд░ рдЕрдиреНрдп libs) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lib.d.ts рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рддрдм рд╕рдореБрджрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рдмрдирд╛рдП/рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

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

@RyanCavanaugh рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреИрдЪ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ .d.ts рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реИрдВ)ред

@danquirk рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗ "рдЧрд▓рдд" рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрд░ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рд╣реЛрдВрдЧреЗред

рд╡реИрд╕реЗ рднреА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдПрдХ рдЦреЛрдпрд╛ рд╣реБрдЖ рдХрд╛рд░рдг рд╣реИред

рд╡реИрд╕реЗ, рдПрдордПрд╕рдЖрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдХрдВрдкрд╛рдЗрд▓рд░ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд┐рдпрд╛ - рдХреНрдпрд╛ рдЙрдирдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдХрд╛рдЧрдЬрд╛рдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВ? рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕реЗ рдорд┐рд▓рд╛: http://research.microsoft.com/apps/pubs/?id=224900 рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

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

рд╣рд░ рдЬрдЧрд╣ рдирдП рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪреЗрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛

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

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реИ ... :(

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдЕрд╢рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рдмрдирд╛рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдпрд╛ T | null рдпрд╛ ?T рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди _any_ рддреНрд░реБрдЯрд┐ рддрдм рддрдХ рди рдмрдврд╝рд╛рдПрдВ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдкреНрдЯ-рдЗрди рди рдХрд░ рджреЗред рдЗрд╕рд▓рд┐рдП рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рднреА рдЬреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддреЗ рд╣реИрдВред рдмрдбрд╝реЗ рдХреЛрдбрдмреЗрд╕ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдлрд┐рд░ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЙрдбрд╝рд╛рди рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореБрджреНрджреЗ рдмрд╛рдХреА рд╣реИрдВ ...

@NoelAbrahams рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реА рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕реБрдЭрд╛рд╡ рдерд╛, рд╕рд┐рд░реНрдл рд╡рд╣ рдЙрддреНрддрд░ рдирд╣реАрдВ рдЬреЛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреА
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬрдм (/ рдЕрдЧрд░) рдпрд╣ рдореВрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

@ jods4 рдЬрд┐рд╕рдХреА @RyanCavanaugh рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рд╣реИ (рдПрдХ рдзреНрд╡рдЬ рдмрджрд▓рдиреЗ рдкрд░ рдХрд╣реАрдВ рдФрд░ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рддреНрд░реБрдЯрд┐)ред

рдлрд┐рд░ рд╕реЗ, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рд╢рд╛рдпрдж @spion рдХреЗ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдФрд░ .d.ts' рдореЗрдВ рдирдП рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ
рдЬрд░реВрд░реА рдирд╣реАрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрдЪреЗ рд╣реБрдП "рдХрдИ рдореБрджреНрджреЛрдВ" рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдлреАрдЪрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдлреНрд▓реИрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ _not_ рдмрджрд▓ рдЬрд╛рдПред рдЗрд╕реЗ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрдард╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рд╣рдо 'рдиреЙрдЯ рдирд▓' !T рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдХреЛрд╕реЛрдВ рджреВрд░ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдмрдХрд┐ T | null рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ ?T рдирд╣реАрдВ рд╣реИред

@ jods4 рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ "рдЪреЗрдВрдЬрд┐рдВрдЧ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ -рдХреНрд╖рдорддрд╛ рдмрджрд▓рдирд╛" рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореЗрд░реА (рдФрд░ рд╕рдВрднрд╡рддрдГ

@ рдиреЛрдПрд▓ рдЕрдмреНрд░рд╛рд╣рдо рдХреИрд╕реЗ?
рдЯреА | рдирд▓ рдХреЛ рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЯреА рдХреЛ рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ/рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣реИрдВред
рд╣рд╛рдВ, рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде "рдЪрд╛рд▓реВ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛?

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

рдПрдиреЛрдЯреЗрд╢рди T|null рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрдпрд╛рди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

@jbondc
рджрд┐рд▓рдЪрд╕реНрдк... рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд░реВрдВрдЧрд╛ред

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

@NoelAbrahams
рд╕рднреА рдЕрд╢рдХреНрдд рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░рд┐рд╡рд░реНрддрди рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ ?T рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдП рдХрд┐ рдКрдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХреНрдпреЛрдВред

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдБред рдЯреАрдПрд╕ 1.5 рдХреЗ рд╕рд╛рде рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

function isVoid(item:any): item is void { return item == null; }
declare externalUnsafeFunction(...):string|void

function test() {
  var res = externalUnsafeFunction(...);
  var words = res.split(' '); // error
  if (!isVoid(res)) {
    var words = res.split(' '); // ok
  }
}

рдЕрдм isVoid рдЪреЗрдХ рдХреЛ externalUnsafeFunction рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдкрд░ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдореЗрдВ |void рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред

рдореИрдВ рдЕрднреА рднреА рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рд╢реВрдиреНрдп/рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдореЗрд╣рдирддреА рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ @NoelAbrahams рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рднреА, рдирд▓ рдХреЛ рдЕрднреА рднреА рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐

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

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

@spion рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдпрджрд┐ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ TS рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрдХреАрдирди рд╕рднреА d.ts рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкрд╣рд▓реЗ рд╕реЗ

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

рдореИрдВ рд╕рд╛рд╡рдзрд╛рди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ T|void рдХреЛ рдПрдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЯреВрдЯрдиреЗ рд╕реЗ рдбрд░реЗрдВрдЧреЗред рдпрд╣ рд▓рдЧрднрдЧ рдмрдХрд╡рд╛рд╕ рд╣реИред

@RyanCavanaugh рдпрд╣ рд╢реВрдиреНрдп === рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд (рдПрдХ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдорд╛рди) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдХрд╡рд╛рд╕ рд╣реИред

рдЖрд╣реЗрдВред

рд╣рдорд╛рд░рд╛ рдХреЛрдб T|void рдЖрдзрд╛рд░ рдкрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдореИрдВ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдкрд╛рдКрдВрдЧрд╛ рдпрджрд┐ рдХрд┐рд╕реА рднреА рд╕рдкреНрддрд╛рд╣ рдпрд╣ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, @spion рдпрджрд┐ рдЖрдк рдХрднреА рдЕрдкрдирд╛ рдкреИрдЪ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЪрд▓рд╛рдКрдВрдЧрд╛ред рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдЖрдВрдХрдбрд╝реЗ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХрд┐рддрдиреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред

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

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЗрд╕рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред

@Griffork рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ 1.5 рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдШ рд╕реЗ void рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЗрд╡рд▓ 1.5 рдХреЗ рдмрд╛рдж рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ (рдпрджрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдВрднрд╡ рд╣реЛ)

рдмрдХрд╡рд╛рд╕ рдЬреИрд╕рд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрднреА рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ?

var foo: void;
var bar: void = doStuff();

рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рддреЛ рдлрд┐рд░ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдШ рдореЗрдВ void рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? The Void Type (3.2.4) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрдВрдб рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рднрд╛рд╖рд╛ рдХреЗ рдирдореВрдиреЗ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

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

рдпрд╣ рдкреНрд░рд╢реНрди:

_рдФрд░ рдЕрд╢рдХреНрдд/рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪреЗрдХ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрднреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗ?_

рдкреВрд░рд╛ рд╕реВрддреНрд░ рдЗрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд░рдпрд╛рди рдХреЗрд╡рд▓ рдЗрд╕ рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ string|void рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдХрд╡рд╛рд╕ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдмрдХрд╡рд╛рд╕ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд▓реЗрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЬреЛ рдХреЛрдб рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ afaik рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп TS 1.5 рд╣реИ, рд╣реИ рдирд╛?

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

interface Legacy { 
  get<T>(...):Promise<T|void>
}

function isVoid(val: any): val is void { return val == null; } // also captures undefined

legacy.get(...).then(val => {
  // val.consumeNormally() is a type error here
  if (!isVoid(val)) { 
    val.consumeNormally(); // OK
  }
  else { handle null case }
});

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ void рд╕рдВрдШ рдХреЗ рд▓рд┐рдП рдкрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ val , рдЕрдорд╛рдиреНрдп рд╣реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб |void рдХреЛ рд╣рдЯрд╛рдХрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ T рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

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

рд╢реВрдиреНрдп рдЪрд░ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рди рдХрд░реЗрдВ! рд╡реЗ рдЗрдХрд╛рдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рднрд╛рд╡реЛрдВ рдореЗрдВ (рд╕реА # рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рд░ рдЪреАрдЬ рдХреЗ 2 рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: one
рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдПрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП)ред рдХреГрдкрдпрд╛ рд╢реВрдиреНрдп рдХреЛ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ, рдареАрдХ рд╣реИ?
27 рдЬрдирд╡рд░реА 2015 рдХреЛ рд░рд╛рдд 8:54 рдмрдЬреЗ, "рдЧреЛрд░реНрдЧреА рдХреЛрд╕реЗрд╡" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВрдиреЗ рдЬреЛ рдХреЛрдб рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ afaik рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп TS 1.5 рд╣реИ, рд╣реИ рдирд╛?

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

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд░рд╛рд╕рдд {
рдкреНрд░рд╛рдкреНрдд(...):рд╡рд╛рджрд╛
}
рдлрд╝рдВрдХреНрд╢рди isVoid (рд╡реИрд▓: рдХреЛрдИ рднреА): рд╡реИрд▓ рд╢реВрдиреНрдп рд╣реИ {рд░рд┐рдЯрд░реНрди рд╡реИрд▓ == рдЕрд╢рдХреНрдд; }//рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рднреА рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ

рд╡рд┐рд░рд╛рд╕рддред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (...)ред рддрдм (рд╡реИрд▓ => {
// val.consumeNorally() рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ
рдЕрдЧрд░ (! isVoid (рд╡реИрд▓)) {
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ (); // рдареАрдХ рд╣реИ
}
рдЕрдиреНрдп {рдЕрд╢рдХреНрдд рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ}
});

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
рдмрдХрд╡рд╛рд╕?

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -71767358
.

рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ T|void рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрднреА рдЕрд░реНрдерд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдпрдо рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрд╕рдХреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдШ рдХреЗрд╡рд▓ рд╕реБрдкрд░рдЯреЗрдк рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Cat|Animal рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ Animal ред void рдХреЛ null / undefined рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдб-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ null рдФрд░ undefined рд╣реА _ рдореЗрдВ рд╣реИрдВ рд╕рднреА T рдХреЗ рд▓рд┐рдП T _ рдХрд╛ рдбреЛрдореЗрди, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ T рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, T|null|undefined , рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА T рдореЗрдВ рдврд╣рдиреЗ рдХреЗ рдЕрдзреАрди рд╣реЛрдЧрд╛ред void рдХреЛ null|undefined рд▓рд┐рдП рдПрдХ рдордВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрддрд╛, рддреЛ рд╕рдВрдХрд▓рдХ T|void рдХреЛ рдкрд╣рд▓реЗ рд╣реА T рдзреНрд╡рд╕реНрдд рдХрд░ рджреЗрддрд╛ред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf рдкрдврд╝реВрдВрдЧрд╛

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

рдЬреИрд╕рд╛; T|void , рдЯреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ _not_ void рдХрд╛ рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХрдорд╛рддреНрд░ рд╕реБрдкрд░рдЯреЗрдк (рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) any ред

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

рд╕рдВрдкрд╛рджрд┐рдд 2: рдЖрдкрдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ рдЙрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝реЗрдВ, рдФрд░ рдпрд╣ рд╕рдЪрдореБрдЪ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдиреЗ рд╢реВрдиреНрдп рд╢рдмреНрдж рджрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рд╕рд╛рдорд╛рдиреНрдп (рдпрд╛ рд╕рд╣реА) рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреНрдпрд╛ рдорд╛рдиреА рдЬрд╛рддреА рд╣реИред

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

рдФрд░ рдореИрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдиреЗ рдХреА рд╡рд┐рдбрдВрдмрдирд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ T|null|undefined рдХреЛ T "рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ" рдЬрдмрдХрд┐ T|void рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА ...)

@jbondc

рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рд╕реНрдерд┐рд░ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рддрд╛рдХрд┐ рддрд░реНрдХ рдЕрдорд╛рдиреНрдп рд╣реЛред рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╕рднреА рдорд╛рди any рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рдХреБрдЫ рднреА рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рддрдереНрдп рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рдореМрдЬреВрдж рди рд╣реЛрдиреЗ рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ

рдпрд╣ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд┐рдбрдВрдмрдирд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИ:

  1. рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, null
  2. рдЖрдк рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрддрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдпрд╛ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдПрдВ var s:string = null )
  3. рдЖрдк рдПрдХ void рдкреНрд░рдХрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдорд╛рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдпрд╛ рдЧреБрдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк T|void рдХреЛрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рджрд╛рд╡рд╛ рдпрд╣ рд╣реИ рдХрд┐ (3) рдмрдХрд╡рд╛рд╕ рд╣реИ, рдЬрдмрдХрд┐ (2) рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореИрдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЖрдЬрд╝рдорд╛рдЙрдВрдЧрд╛:

  1. рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдорд╛рди рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ {}
  2. рдЖрдк рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирдВрдмрд░ рдпрд╛ рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ var s:string = {} ) рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ
  3. рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ {} рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ {} рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рдпрд╛ рдЧреБрдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдФрд░ T|{} рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рдпрд╛ рдЧреБрдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ {} рдмрд┐рд▓реНрдЯ-рдЗрди рд╡рд╛рд▓реЗ

рдЕрдм рдХреМрди рд╕рд╛ рдмрдХрд╡рд╛рд╕ рд╣реИ, (2) рдпрд╛ (3)?

рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдХреБрдЫ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВред

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

@spion рдареАрдХ рдпрд╣реА рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред

рдпрд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рдХрд░ рджреЗрдЧрд╛:
рдпреБрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░:


рд╢реВрдиреНрдп рдХреНрдпрд╛ рд╣реИ?

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

рддреЛ, рд╢реВрдиреНрдп рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рддред

рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ

рддреЛ, рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ)ред


рд╢реВрдиреНрдп рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред

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


рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред

3.2.6 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рдирд╛рдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред


рд╢реВрдиреНрдп рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд _types_ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рд╣реИ

. рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред


рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ @jbondc, рдирд▓ рдПрдХ рдорд╛рди рд╣реИ, рдирд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдорд╛рди рд╣реИ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рд╢реВрдиреНрдп (рд▓реЛрдЕрд░-рдХреЗрд╕ рдЬрдм рдХреЛрдб рдореЗрдВ) рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдирд▓ рдХрд╛ рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рд╣реИ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реЗрдХрд┐рди _рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ( any рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢реВрдиреНрдп рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:

рд╢реВрдиреНрдп:

рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реБрдкрд░рдЯрд╛рдЗрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рд╢реВрдиреНрдп:

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

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд:

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

рдЕрдм рд╕рд╛рдл?

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

@jbondc рдпрд╣ рд╡рд┐рдбрдВрдмрдирд╛ рд╣реИ: рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ, рдЬреЗрдПрд╕ рдореЗрдВ рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдХрднреА рднреА рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдпрд╛ рдЧреБрдгреЛрдВ (рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рдмрдХрд╡рд╛рд╕ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдмрдХрд╡рд╛рд╕ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ {} рдорд╛рди рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ред TS рдореЗрдВ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИ, _but_ null рдпрд╛ undefined рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рдПрдХ рдФрд░ рдмрдХрд╡рд╛рд╕ рд╣реИред рдФрд░ рдпрд╣ рд╡рд┐рдбрдВрдмрдирд╛ рд╣реИ - рдХрд┐ (рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдФрд░ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рджреЛрдиреЛрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬ рдореЗрдВ рдЧрдардмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ :)

рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рдХреБрдЫ рдмрд┐рдирд╛ рдЧрд╛рд░реНрдб рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╕реЛрдЪрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред

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

@jbondc рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреА рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ (рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдШрдЯрд╛рдПрдВ)

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

рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдмрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рджреЛ рдореБрджреНрджреЗ рд╣реИрдВ: 1) рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдПрдХ рдирдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ 2) рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкрд╛рдпрдерди 2/3 рд╕реНрдЯрд╛рдЗрд▓ рджрд▓рджрд▓ рд╕реЗ рдмрдЪрдирд╛

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдЯреАрдПрд╕ рдХреЛрдб рдХрд╛ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╕реАрдорд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ 2to3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред

рд╢рд╛рдпрдж рдПрдХ рдХреНрд░рдорд┐рдХ рдкреНрд░рд╡рд╛рд╕рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

  1. рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП '? рдЯреА' рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреЗрд╢ рдХрд░реЗрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред
  2. рдПрдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ '?T' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдСрдЯреЛ-рд░реАрд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╡рд┐рдирдореНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 'T' рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ '?T' рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдПрдХ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЬрд┐рд╕ рдХреЛрдб рдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧреИрд░-рд╢реВрдиреНрдп рдерд╛ рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 'рдЯреА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬреЛ 'T' рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП '? T' рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╛рди рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ (рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░) рдХрд┐ рдорд╛рди рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП let foo: T = expect(possiblyNullFoo) рдпрд╛ let foo:T = possiblyNullFoo!
  3. рдЯреВрд▓ рдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
  4. рдПрдХ 'рдЯреА' рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд╛рд▓реЗ рд╕реНрд▓реЙрдЯ рдХреЛ '? рдЯреА' рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА рдкреЗрд╢ рдХрд░реЗрдВред
  5. рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЬрдВрдЧрд▓реА рдореЗрдВ рд╕реЗрдВрдХрдиреЗ рджреЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
  6. рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдПрдХ рдкреНрд░рдореБрдЦ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, 'T' рддреНрд░реБрдЯрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд╛рд▓реЗ рд╕реНрд▓реЙрдЯ рдХреЛ '?T' рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ред

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

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

рдореЗрд░реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд┐рдЪрд╛рд░:

  1. expect() рднрд╛рдЧ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рди рдХреЗрд╡рд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрдВрдЯрд░рдлреЗрд╕, рдЬреЗрдирд░рд┐рдХ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ ...
  2. рдореИрдВ _рдерд┐рдВрдХ_ рдЯреАрдПрд╕ рдореЗрдВ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред
  3. рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрджреНрдпрдо рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрдбрд╝реЗ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣ рдЙрд╕ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдПрдХ рдмрдбрд╝рд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдмрдирд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ TS рдЯреАрдо рдирд╣реАрдВ рдЪрд╛рд╣рддреА рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдСрдкреНрдЯ-рдЗрди" рдзреНрд╡рдЬ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдзреНрд╡рдЬ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╛рди рдХреЛрдб/рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ (рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдШрдЯрд╛рдирд╛) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред

@ jods4 - expect() рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рд╕реЛрдЪ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рднреА рдЖрдкрдХреЗ рдкрд╛рд╕ ?T , рд╕рдВрдХрд▓рдХ T | undefined рджреЗрдЦрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рд╕рдВрднрд╡ред

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

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреБрдЫ рдФрд░ - https://github.com/rwaldron/tc39-notes/blob/master/es6/2015-01/JSExperimentalDirections.pdf рдХреНрд░реЛрдо рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд╢реИрд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдПрдиреЛрдЯреЗрд╢рди) JS рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВред рд╡рд╣рд╛рдБ рдЕрд╢рдХреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рд╣реИ - рд╡реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

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

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

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

рдЖрдк рдЕрд╢рдХреНрдд рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ
рдирд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд░рд┐рд╕рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрд╢рдХреНрдд рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗ
рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ред
20 рдлрд░рд╡рд░реА 2015 рдХреЛ рджреЛрдкрд╣рд░ 1:41 рдмрдЬреЗ, "рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХреЗрд╕реЗрдВрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

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

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

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

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75295204
.

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрд╛рдВрдЪреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХрд╛рдлреА рддреЗрдЬ рд╣реЛрддреА рд╣реИред
21/02/2015 рдХреЛ 11:54 рдкреВрд░реНрд╡рд╛рд╣реНрди рдХреЛ, "рдЕрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЖрдк рдЕрд╢рдХреНрдд рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ
рдирд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд░рд┐рд╕рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрд╢рдХреНрдд рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗ
рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ред
20 рдлрд░рд╡рд░реА, 2015 рджреЛрдкрд╣рд░ 1:41 рдмрдЬреЗ, "рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХреЗрд╕реЗрдВрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

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

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

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment-75295204>
.

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75346198
.

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЪреЗрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИрдВ (рдпрджрд┐ рдирд▓ рдХреАрд╡рд░реНрдб рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ
рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬрд╣рд╛рдВ рд╡рд╣ рдЖ рд╕рдХрддрд╛ рд╣реИ рдкрд╣рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдХреНрдпреЛрдВ? 1. рдмрд┐рдирд╛ рдЪреЗрдХ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬ рдЪрд▓рддрд╛ рд╣реИ
рдирд▓ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЗ рд╕рд╛рдеред 2. рдЗрд╕рдореЗрдВ рдХрдо if's рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрдардиреАрдп
рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдпред
20 рдлрд░рд╡рд░реА 2015 рдХреЛ рд╢рд╛рдо 7:57 рдмрдЬреЗ, "рдЧреНрд░рд┐рдлрд╝реЛрд░реНрдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрд╛рдВрдЪреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХрд╛рдлреА рддреЗрдЬ рд╣реЛрддреА рд╣реИред
21/02/2015 рдХреЛ 11:54 рдкреВрд░реНрд╡рд╛рд╣реНрди рдХреЛ, "рдЕрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЖрдк рдЕрд╢рдХреНрдд рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ
рдирд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд░рд┐рд╕рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрд╢рдХреНрдд рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗ
рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ред
20 рдлрд░рд╡рд░реА, 2015 рджреЛрдкрд╣рд░ 1:41 рдмрдЬреЗ, "рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХреЗрд╕реЗрдВрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

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

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

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75295204

.

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment-75346198>
.

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75346390
.

рдЖрдк рдмрд┐рдВрджреБ рдЦреЛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрд╛рдВрдЪ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдмрдЬрд╛рдп рдЕрдХреНрд╕рд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд╢рдХреНрдд / рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ
рдЙрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
21/02/2015 рдХреЛ рджреЛрдкрд╣рд░ 12:20 рдмрдЬреЗ, "рдПрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЪреЗрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИрдВ (рдпрджрд┐ рдирд▓ рдХреАрд╡рд░реНрдб рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ
рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬрд╣рд╛рдВ рд╡рд╣ рдЖ рд╕рдХрддрд╛ рд╣реИ рдкрд╣рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдХреНрдпреЛрдВ? 1. рдмрд┐рдирд╛ рдЪреЗрдХ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬ рдЪрд▓рддрд╛ рд╣реИ
рдирд▓ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЗ рд╕рд╛рдеред 2. рдЗрд╕рдореЗрдВ рдХрдо if's рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрдардиреАрдп
рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдпред
20 рдлрд░рд╡рд░реА 2015 рдХреЛ рд╢рд╛рдо 7:57 рдмрдЬреЗ, "рдЧреНрд░рд┐рдлрд╝реЛрд░реНрдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬрд╛рдВрдЪреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХрд╛рдлреА рддреЗрдЬ рд╣реЛрддреА рд╣реИред
21/02/2015 11:54 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░, "рдПрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡" рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдЖрдк рдЕрд╢рдХреНрдд рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рдФрд░ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрд╣рд╛рдБ рдкреЗ
рдирд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд░рд┐рд╕рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрд╢рдХреНрдд рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗ
рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рд╣рд░ рдЬрдЧрд╣ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ред
20 рдлрд░рд╡рд░реА, 2015 рджреЛрдкрд╣рд░ 1:41 рдмрдЬреЗ, "рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХреЗрд╕реЗрдВрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

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

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рд╢рд╛рдпрдж рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдареЗрдХреЗ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<

https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75295204

.

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75346198

.

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment-75346390>
.

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75347832
.

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

class Nothing { public 'i am nothing': Nothing; }
class Something { 
    constructor(
    public name: string,
    public value: number
   ) { }
}
var nothing = new Nothing();
var whoami = Math.random() > 0.5 ? new Something('meh', 66) : nothing;

if (whoami instanceof Nothing) {
    console.log('i am a null killer');
} else if (whoami instanceof Something) {
    console.log(whoami.name + ': ' + whoami.value);
}

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

рдХрд┐рддрдирд╛ рдордЬреЗрджрд╛рд░ рдерд╛ рд╡реЛ?

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рдХрд╛ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдПрдХ рдирд▓ рдЪреЗрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, a
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд┐рд╕реЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЗрдирдореЗрдВ рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рдХрд░рдирд╛ рд╣реИ?
рдореБрдЭреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦрдиреЗ рджреЗрдВ: рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
'.' рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рддреЗрдЬрд╝ рд╣реИред рдПрдХреНрд╕реЗрд╕рд░реНрд╕
21/02/2015 рдХреЛ рджреЛрдкрд╣рд░ 12:58 рдмрдЬреЗ, "рдЕрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

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

рдХрдХреНрд╖рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ {рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ 'рдореИрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реВрдВ': рдХреБрдЫ рднреА рдирд╣реАрдВ; }
рдХрдХреНрд╖рд╛ рдХреБрдЫ {
рдирд┐рд░реНрдорд╛рддрд╛ (
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╛рдо: рд╕реНрдЯреНрд░рд┐рдВрдЧ,
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореВрд▓реНрдп: рд╕рдВрдЦреНрдпрд╛
) { }
}
рд╡рд░ рдХреБрдЫ рдирд╣реАрдВ = рдирдпрд╛ рдХреБрдЫ рдирд╣реАрдВ ();
рд╡рд░ whoami = Math.random() > 0.5 ? рдирдпрд╛ рдХреБрдЫ ('рдореЗрд╣', 66): рдХреБрдЫ рдирд╣реАрдВ;

рдЕрдЧрд░ (рдЬреЛрдореА рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рднреА рдирд╣реАрдВ) {
// рд╣реВрдореА рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдореИрдВ рдПрдХ рдЕрд╢рдХреНрдд рд╣рддреНрдпрд╛рд░рд╛ рд╣реВрдБ');
} рдФрд░ рдЕрдЧрд░ (рд╡реНрд╣рд╛рдореА рдЗрдВрд╕реНрдЯреЗрдВрд╕рдСрдл рд╕рдордерд┐рдВрдЧ) {
// whoami рдХреБрдЫ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рд╡реНрд╣рд╛рдореА.рдирд╛рдо + ':' + whoami.value);
}

рддреЛ рдмрд╕ рдПрдХ рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд▓рд╛рдкрддрд╛ рдорд╛рди рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ _100% рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ_ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рдЧрд╛рд░реНрдб, рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдЪреЗрдХ рдЫреВрдЯ рди рдЬрд╛рдПред

рдХрд┐рддрдирд╛ рдордЬреЗрджрд╛рд░ рдерд╛ рд╡реЛ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75349967
.

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рдорд╛рдиреЛрдВ рдХрд╛ "рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ"ред

рд╕рд╛рде рд╣реА, рдпрд╣ рдЙрди рдореБрджреНрджреЛрдВ рдкрд░ рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЪрд░ рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗ рдЬреЛ рдХрд┐ undefined ред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк "рдЕрдирд┐рдпрдорд┐рдд" рдорд╛рди рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ , рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
http://jsperf.com/nullable-vs-null-vs-undefined-vs-instanceof
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреА рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдЗрддрдиреЗ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдХрд┐ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ 2% рд╕реЗ рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЛрдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 1% рд▓рд╛рдн рд╣реЛрдЧрд╛ред

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

рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЖрдзрд╛рд░ 800 рд╕реЗ рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдХреЛрдб рдХреА 120000 рд╕реЗ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ
рдФрд░ рдЬрдм рдореЙрдбрд▓рд┐рдВрдЧ рд╡реНрдпрд╡рд╕рд╛рдп рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╣рдореЗрдВ рдХрднреА рднреА рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
рдбреЛрдореЗрди рд╕рдВрд╕реНрдерд╛рдПрдВред рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдореЗрдВ рдбреЛрдо рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рд▓рд┐рдП рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛,
рдРрд╕реЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрд▓рдЧ-рдерд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдирд▓ рдХреЗ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рди рд╣реЛ
рдореЗрдВред рдореИрдВ рдЖрдкрдХрд╛ рддрд░реНрдХ рдирд╣реАрдВ рдЦрд░реАрджрддрд╛ рдХрд┐ рдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣рд╛рдВ рд╣реИрдВ
рдмрд┐рдирд╛ рдирд▓ рдХреЗ (рд╣рд╛рд╕реНрдХреЗрд▓) рдпрд╛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рднрд╛рд╖рд╛рдПрдБ
рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд (рдПрдл #)ред
22 рдлрд░рд╡рд░реА 2015 рдХреЛ рд╕реБрдмрд╣ 9:31 рдмрдЬреЗ, "рдЬреЙрди" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ https://github.com/aleksey-bykov рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реЗ
рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп, рдЖрдк рд╢реВрдиреНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣рд╛рдВ рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рджреА рдЧрдИ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ
рд╡реИрд╕реЗ рднреА рдПрдХ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
https://www.google.com/patents/US7627594?ei=P4XoVPCaEIzjsATm4YGoBQ&ved=0CFsQ6AEwCTge

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -75437927
.

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

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

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

рдпрджрд┐ рдЖрдк рдКрдкрд░ рднреА рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЧреИрд░-рдЕрд╢рдХреНрдд рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

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

рджреЛрдмрд╛рд░рд╛, рд╢рд╛рдпрдж рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ (рд╣рдорд╛рд░реА рддрд░рд╣), рдЖрдк <10ms рдореЗрдВ 10,000 рдЪреЗрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрд▓ рд╣реА рдмрд┐рд▓реНрдб рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдореИрдВрдиреЗ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ C# рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рджреЗрдЦрд╛ред рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдорд╛рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ #3003 рдЦреЛрд▓рд╛ред

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

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

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдореИрдВрдиреЗ рдЕрднреА рдкреВрд░реЗ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ non-voidable рдФрд░ voidable рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ TS рдпреБрдХреНрддрд┐ рдореЗрдВ void null рдФрд░ undefined рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ . (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдп рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ: рдореБрд╕реНрдХрд╛рди:)

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

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

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

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

рдореИрдВ рдЗрд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдбреАрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЦрд╛рдореА рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ ...

  1. рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдбреАрдЯреА рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВ (рдореВрд▓ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг)
    рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдорд░реНрдерди)
  2. null рдХреАрд╡рд░реНрдб рдХреЛ рдордирд╛ рдХрд░реЗрдВ
  3. рдЙрди рд╕рднреА рдЬрдЧрд╣реЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдирд▓ рдмрд╛рд╣рд░ рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд▓реАрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
  4. рдЕрдЪреНрдЫреА рдХреЗ рд▓рд┐рдП рдЪрд▓реА рдЧрдИ null рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ

рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╣рдо рдЪрд░рдг 1, 2 рдФрд░ 3 рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдЕрднреАред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рдЖрдк (2) undefined рд╕рд╛рде рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдХрдИ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ undefined рдХреАрд╡рд░реНрдб рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ: рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп, рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝реАрд▓реНрдб, рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд▓рд╛рдкрддрд╛ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ ...

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

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

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

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

рдкреНрдпреЛрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ

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

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

рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдиреЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛?

рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рднреА рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рднреА рдмрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВрдЧреЗ) (рдЬреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)?

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

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

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ "рд╢реВрдиреНрдп" рд╕рдорд╕реНрдпрд╛ рдЪрд▓реА рдЧрдИ рд╣реИ (рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рднреА) рд╕рднреА рдЕрдЪреНрдЫреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдк-рдЙрддреНрдкрд╛рдж рд╣реИ рдЬреЛ рдПрдбреАрдЯреА рд╣рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ

рдЖрдкрдХреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдЯ рд▓реВрдк рдФрд░ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рддрдерд╛рдХрдерд┐рдд Nullable<a> рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдпрд╣ рд╕реЛрдЪрдХрд░ рдореВрд░реНрдЦ рдмрдирд╛рдХрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд▓рд┐рдкрдЯреЗ рдореВрд▓реНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рд░рдирдЯрд╛рдЗрдо рдкрд░) рдРрд╕рд╛ рдореВрд▓реНрдп рдмрд╕ рд╣реИ рдПрдХ рдЖрджрд┐рдо рдЬрд┐рд╕реЗ рдирд▓ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдирд▓рдмрд▓ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЙрд╕ рдирд▓ рдХреЛ рд▓реАрдХ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ

рдЕрдЧрд░ рдЖрдк рд╡рд┐рд╡рд░рдг рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ

interface Nullable<a> {
    'a nullable': Nullable<a>;
    'uses a': a;
}
/*  the following `toNullable` function is just for illustration, we don't use it in our code,
    because there are no values capable of holding naked null roaming around,
    instead we just alter the definition of all unsafe external interfaces:
    // before
    interface Array<T> {
       find(callback: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T;
    }
    // after
    interface Array<a> {
       find(callback: (value: a, index: number, array: a[]) => boolean, thisArg: any): Nullable<a>;
    }
*/
function toNullable<a>(value: a) : Nullable<a> {
    return <any>value;
}
function toValueOrDefault<a>(value: Nullable<a>, defaultValue: a)  : a {
    return value != null ? <any>value : defaultValue;
}

рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? 'a nullable': a рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП callFunctionWithNullableResult<T,U>(f: (T) => U, arg:T):Nullable<U> (рд╡рд┐рднрд┐рдиреНрди рдзрд░реНрдорд╛рд░реНрде рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдЕрдзрд┐рднрд╛рд░ рд╕рд╣рд┐рдд) рд╣реИ рдЬреЛ рдирд▓ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ?

рдФрд░ рдпрджрд┐ рдПрдХ рд▓рд┐рдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╢рдХреНрдд рдХреАрд╡рд░реНрдб рдирд┐рд╖рд┐рджреНрдз рд╣реИ, рддреЛ рдЖрдк " Nothing " рдХреЛ рдПрдХ рдЕрд╢рдХреНрдд рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ toNullable(null) ?

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

рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? 'рдПрдХ рдЕрд╢рдХреНрдд': рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ?

рдареАрдХ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рдиреЗ рд╕реЗ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдзрд┐рднрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

  • рдирд╛рдордорд╛рддреНрд░ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд░реНрдЬ рдирд╛рдо): https://gist.github.com/aleksey-bykov/0ab85f0b5e83fc848f85
  • рдЗрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╣рд┐рд╕рд╛рдм рд╡рд╕реНрддреБ рдХреА рд╕рддрд╣ (рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░) рддрдХ рд╣реИ: https://github.com/Microsoft/TypeScript/issues/468

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ callFunctionWithNullableResult . рднреА рд╣реИ(рдПрдл: рдЯреА -> рдпреВ, рддрд░реНрдХ: рдЯреА) => рдЕрд╢рдХреНрдд

рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╣рдо рдкрд░рд┐рднрд╛рд╖рд╛ (* .d.ts) рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмреВрдд рд╣реИрдВ, рдмрд╛рд╣рд░реА рдХреЛрдб рдореЗрдВ Nullable "рдЖрд╡рд░рдг" рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрджреЗрд╢ рдореЗрдВ

рдЖрдк рдПрдХ рдЕрд╢рдХреНрдд рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд "рдХреБрдЫ рдирд╣реАрдВ" рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ?

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

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдпреВрдирд┐рдпрдиреЗрдВ + рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рд╛! рдореИрдВ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдШрдВрдЯреЛрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ

рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдкрд░ рд╡рд╛рдкрд╕, рдореБрдЭреЗ рдпреВрдирд┐рдпрдиреЛрдВ рдФрд░ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Either a b рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╕рдордХрдХреНрд╖ рджреЗрдВ
(рдПрдХ рд╕рдВрдХреЗрдд: https://github.com/Microsoft/TypeScript/issues/2264)

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдЕрдзрд┐рдХ рдирд╛рдордорд╛рддреНрд░ рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИрдВ - рд╡реЗ "рдЫрджреНрдо-рдирд╛рдордорд╛рддреНрд░" рд░рд╣рддреЗ рд╣реИрдВред

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

type MyType = A | B

рдФрд░ рдлрд┐рд░ A рдФрд░ B рд▓рд┐рдП рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ... рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдореМрдЬреВрджрд╛ рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Thenable рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ рдпрджрд┐ рд╡рд╣рд╛рдВ рд╣реИ рд╡рд╕реНрддреБ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ then рд╡рд┐рдзрд┐ рд╣реИред рдХреНрдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛? рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рд╣рд╛! рдпрд╣ рдЖрдкрдХреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ рд╣реИред рдЦреИрд░, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рдирд╛рдордорд╛рддреНрд░ рд╣реИ:

enum GottaBeNonimalBrand {}
interface GottaBeNonimal {
     branded: GottaBeNonimalBrand;
}
function toGottaBeNominal() : GottaBeNominal {
   return <any> {};
}

рдПрдХ рд╕реЗрдХрдВрдб рд░реБрдХреЛ! рддреБрдордиреЗ рдзреЛрдЦрд╛ рджрд┐рдпрд╛ ! рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рддрд░реАрдХрд╛ рдЕрднреА рднреА рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рддреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХрд╛рд░ рдирд╛рдордорд╛рддреНрд░ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдмрд╕ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ...

рдЖрдк рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ Either рдХреИрд╕рд╛ рд╣реИ? рд╡рд╣ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ Either рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреБрдЫ 30 рдорд╛рдирдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЕрдм рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдирд╛рдордорд╛рддреНрд░) рдФрд░ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП 30 x number_of_combinations_of_any_2_types_in_my_app рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдореБрдарднреЗрдбрд╝?

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

C# рдЕрдЧрд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдордВрдерди (рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ)

рдореВрд▓ рд░реВрдк рд╕реЗ, C# рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ int ред рдлрд┐рд░ C# 2.0 рдореЗрдВ рд╣рдореЗрдВ рдЕрд╢рдХреНрдд рдорд╛рди рдкреНрд░рдХрд╛рд░ рдорд┐рд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ int? ред рд╕рдВрджрд░реНрдн рд╣рдореЗрд╢рд╛ рдЕрд╢рдХреНрдд рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдФрд░ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ: string рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛, string? рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ string рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ null рдХреЛ string рдкрд░ рдЕрд╕рд╛рдЗрди/рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдареАрдХ рдерд╛, рдЕрдм рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред C# рдЯреАрдо рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ "рдЕрдХреНрд╖рдо" рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдСрдкреНрдЯ-рдЗрди рдирд╣реАрдВ рдХрд░рддреЗред string? рдореЗрдВ рдбреЙрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдереА (рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ)ред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╣реИред рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдлрд╝реНрд▓реИрдЧ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдмрд╛рд╣рд░реА рдХреЛрдб рдЬреЛ рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реЗ рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред

рд╡рд╣ рдЯреАрдПрд╕ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

  1. рд╣рдо рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкреНрдЯ-рдЗрди рдзреНрд╡рдЬ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ (рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкрд╛рд╕) рдпрд╛ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ .d.ts рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐-рдлрд╝рд╛рдЗрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП number ред рдПрдХ рдирдпрд╛ null рдкреНрд░рдХрд╛рд░ рд╣реИред
  3. number? рдХреЗрд╡рд▓ number | null рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред
  4. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ (x: string?) => x.length рдмрд┐рдирд╛ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХреЗред
  5. рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреЗрд╢ рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ let x: string = null;
  6. рдСрдкреНрдЯ-рдЗрди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╕рдордп, 5 рдХреЗ рддрд╣рдд рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред _рдпрд╣ рдХрд╣рдиреЗ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ рдХрд┐ string рдХреЛ рдЕрднреА рднреА string? рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред_

рдпрд╣ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ?

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

рдЬрдм рдореИрдВ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдирдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ string? рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдЪрд┐рдд рдирд▓ рдЬрд╛рдВрдЪ рдХреЗ рдмрд┐рдирд╛ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдн рдФрд░ рд╕рдЦреНрдд рдЬрд╛рдБрдЪ рднреА рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЕрджреНрдпрддрди рдХреА рдЧрдИ рд╣реИрдВред рдПрдХ рдмрд╛рд░ .d.ts рдСрдкреНрдЯ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, null рдХреЛ length(x: string): number рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдмрди рдЬрд╛рддрд╛ рд╣реИред
_(рдиреЛрдЯ: string? рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдСрдкреНрдЯ-рдЖрдЙрдЯ рдХреЛрдб рд╕реЗ string рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИред)_

рдЬрдм рддрдХ рдореИрдВ рдСрдкреНрдЯ-рдЗрди рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдмреЗрд╢рдХ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреА, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕реА рдСрдкреНрдЯ-рдЗрди рдпреЛрдЬрдирд╛ рдХреБрдЫ рдРрд╕реА рд╣реИ рдЬрд┐рд╕ рдкрд░ TS рдЯреАрдо рд╡рд┐рдЪрд╛рд░ рднреА рдХрд░ рд╕рдХрддреА рд╣реИ?

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд▓реЛрдЧ рдПрдХ рдСрдЯреЛрдореЛрдмрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддреЗрдЬрд╝ рдШреЛрдбрд╝рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ..

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

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

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдЪреНрдЪ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЯрд╛рдЗрдкрдХреНрд▓рд╛рд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЖрдЧреЗред рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ "ES6+ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ" рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ?

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

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

рдкреНрдпреЛрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХреА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╛рдкрдХ рдХрд░реА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд рдХреНрд▓реЛрдЬрд░ рд╣реИ?

@ jods4 рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА .d.ts рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдЙрдЯ-рдСрдл-рд╡рд░реНрдХ рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ рдпрд╣ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рд╡рд╛рдЗрдб рд╕реЗрдЯрд┐рдВрдЧ .d.ts (рдФрд░ .d.ts) рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдмрд┐рдирд╛ рдЭрдВрдбреЗ рдХреЗ рд╣рдореЗрд╢рд╛ 'рдкреБрд░рд╛рдирд╛' рддрд░реАрдХрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХрд┐рддрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдпрд╛ .d.ts рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╕рдордп рднреНрд░рдо рдкреИрджрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ)?
рдирдП рдФрд░ рдкреБрд░рд╛рдиреЗ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреЛрдб рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ) рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдФрд░ рдХрд╛рд╕реНрдЯ (рд╢рд╛рдпрдж рдПрдХ рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднрд╛рд╖рд╛ рд╕реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рдЕрдЯреЗ рдкрдбрд╝реЗ рд╣реЛрдВрдЧреЗ?
рдЕрдзрд┐рдХрддрд░ рдореИрдВ (рдЕрдм) рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ @ jods4 рдФрд░ ! рд╕реБрдЭрд╛рд╡ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред

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

рджреВрд╕рд░реА рдЫреЛрдЯреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ undefined рдХреЛ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╛ рдПрдХ рдХреАрд╡рд░реНрдб рдорд╛рди рд░рд╣рд╛ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдХ рдЪрд░/рд╕рдВрдкрддреНрддрд┐ undefined рдЬреЛ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ undefined ред null рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИ (рдЬреЛ рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рднреА рд╣реЛрддрд╛ рд╣реИ null , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдмрдЧ рд░рд╣реА рд╣реИ рдХрд┐ рдЗрд╕реЗ typeof "object" рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпреЗ рджреЛ рдЪреАрдЬреЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред

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

рдПрдХ рдЪрд░/рд╕рдВрдкрддреНрддрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдЬреЛ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдирд▓ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИ (рдЬреЛ рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рднреА рд╣реЛрддрд╛ рд╣реИ null

@kitsonk рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рддрд░реНрдХ рд╣реИ; null рдПрдХ number , рдпрд╣ Person рддреБрд▓рдирд╛ рдореЗрдВ Car рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореБрджреНрджрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдпрд╣ рднреЗрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

@kitsonk рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЖрдо рддреНрд░реБрдЯрд┐ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн/рдкрд╣реБрдВрдЪ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИред рдХрд┐рд╕реА рдЧреБрдг рдпрд╛ рдЪрд░ рдХреЛ рд╢реВрдиреНрдп/рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреЗ рд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛрдб рдЕрдзрд┐рдХ рдзреНрд╡рдирд┐рдордп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ LS рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЛ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдЧреНрд╕ рдХреЛ рдкрдХрдбрд╝рдиреЗ рджреЗрдВ https://github.com/Microsoft/TypeScript/issues/3692ред

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

interface Mixed {
    optional?: string;
    notOptional: string;
    nonNullable!: string;
}

function mixed(notOptional: string, notNullable!: string, optional?: string): void {}

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

рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ "рд╡реИрдХрд▓реНрдкрд┐рдХрддрд╛" рддрд░реНрдХ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ?

рдЯреАрдПрд╕ рдореЗрдВ рдЕрднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред Null рдФрд░ undefined рдЕрднреА рднреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдпреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рдХреБрдЫ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдорд╛рдорд▓реЗ рд╣реИрдВ

interface A {
   a?: string;
}
let a: A = {} // ok as expected

interface B {
   b: string;
}
let b1: B = { b: undefined } //ok, but unintuitive
let b2: B = { b: null } // ok, but unintuitive
let b3: B = {} // error as expected

рдпрд╛ рдЯреАрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП optional рдХрд╛ рдЕрд░реНрде рд╣реИ рдЧреИрд░-рдкреНрд░рд╛рд░рдВрднрд┐рдХред рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╢реВрдиреНрдп рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп (рдЧреИрд░-рд╢реВрдиреНрдп, рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

? рдХреЛ рд╕рдВрдкрддреНрддрд┐/рддрд░реНрдХ рдирд╛рдо рд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдирд╛рдо рдХреЗ _existence_ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред @tinganho рдиреЗ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдордЭрд╛рдпрд╛ред рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдмрдврд╝рд╛рддреЗ рд╣реБрдП:

function foo(arg: string, another?: string) {
  return arguments.length;
}

var a: A = {};
a.hasOwnProperty('a') // false
foo('yo') // 1, because the second argument is _non-existent_.
foo(null) // this is also ok, but unintuitive

рдЧреИрд░-рд╢реВрдиреНрдп ! рдХрд┐рд╕реА рдирд╛рдо рдХреЗ _existence_ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рдХрд╛рд░ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИред

interface C {
  c: !string;
}

let c1: C = { }; // error, as expected
let c2: C = { c: null }; // error, finally!
let c3: C = { c: 'str' }; // ok! :)

function bar(arg: !string) {
  return arg.length;
}

bar(null) // type error
bar('foo') // 3

@Griffork рдореМрдЬреВрджрд╛ .d.ts рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЦреНрдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ .d.ts рдСрдкреНрдЯ-рдЗрди рди рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЧреИрд░-рд╢реВрдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдХреЗ рдРрд╕рд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдкрднреЛрдХреНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ/рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@kitsonk рдпрд╣ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдмрдЧ рдХреЛ рдХрдо рдХрд░ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдХреБрдЫ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд▓ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╛ рдЖрдк рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХрд░рддреЗ рд╣реИрдВ: let x = array.sum(x => x.value) , рдХреНрдпрд╛ рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ x рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ? рд╢рд╛рдпрдж рдпрд╣ 0 рд╣реИ рдЕрдЧрд░ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ? рдЖрдкрдХреЛ рдХреИрд╕реЗ рдорд╛рд▓реВрдо? рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ x.value === null ? рдХреНрдпрд╛ рдпрд╣ sum() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЙрди рдорд╛рдорд▓реЛрдВ рдХреА рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рдкрд╛рд╕ рдХрд░рдирд╛ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдмрд┐рдирд╛ рдЪреЗрдХ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ, рдЕрдм рдХреЛрдИ "NullReferenceException" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ undefined рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдЗрдирд╕ рдХреЙрд░реНрдирд░ рдХреЗрд╕)ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЕрд╢рдХреНрдд рдпрд╛ рдирд╣реАрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рди рдХрд┐ рдЪрд░/рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рдгрд╛рдУрдВ рд╕реЗ рдФрд░ рдпрд╣ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб, рдпреВрдирд┐рдпрди рдФрд░ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИред

рдЯрд╛рдЗрдк _void_ рдХрд╛ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди null рдФрд░ undefined рдорд╛рди рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ

рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ: https://github.com/Microsoft/TypeScript/issues/185#issuecomment -71942237

@jbondc рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреАред void null рдФрд░ undefined рд▓рд┐рдП рдПрдХ рдЫрддреНрд░ рд╢рдмреНрдж рд╣реИред void 0 рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ void рднреА рдЗрд╕рдХреА рдЫрддрд░реА рдХреЗ рдиреАрдЪреЗ рд╣реИред

рд╕рдВрджрд░реНрдн: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#324 -the-void-type

рдЕрдиреБрдорд╛рди any ред рд▓реЗрдХрд┐рди null рдФрд░ undefined рдЕрднреА рднреА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

void 0 рд╣рдореЗрд╢рд╛ undefined рднреА http://stackoverflow.com/a/7452352/449132 рд▓реМрдЯрд╛рддрд╛ рд╣реИ

@jbondc рдпрджрд┐ рдкреНрд░рд╢реНрди рдПрдХ рдкреЛрдЯреЗрдВрд╢рд┐рдпрд▓ рдирд▓-

function returnsNull() {
  return null;
}

null рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

undefined рдЖрд╕рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдФрд░ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ (рдЕрднреА рддрдХ?) рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯреАрдПрд╕ рдЯреАрдо рдСрдкреНрдЯ-рдЗрди рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛрдЧреА рдпрд╛ рдирд╣реАрдВред

рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛: "рд╣рдо рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рдЭрдВрдбреЗ/рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЕрд░реНрде рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ"ред рдКрдкрд░ рдЬреЛ рд╡рд┐рдЪрд╛рд░ рдореИрдВ рд╡рд░реНрдгрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ 100% рдирд╣реАрдВред рд╡рд╣ рдЧреНрд░реЗ рдХреНрд╖реЗрддреНрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ TS рдЯреАрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреА рд╣реИред

@ jods4 рдореИрдВ рдЕрдиреБрдорд╛рдирд┐рдд any рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдореМрдЬреВрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред рдФрд░ рдПрдХ рдСрдкреНрдЯ-рдЗрди рд░рдгрдиреАрддрд┐ рдмреЗрд╣рддрд░ рд╣реЛрдЧреАред [1]

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

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

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

@impinball

рдореИрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдЕрд╢рдХреНрдд any рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдореМрдЬреВрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред рдФрд░ рдПрдХ рдСрдкреНрдЯ-рдЗрди рд░рдгрдиреАрддрд┐ рдмреЗрд╣рддрд░ рд╣реЛрдЧреАред

рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рдпрд╣рд╛рдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕реЛрдЪрдиреЗ рдкрд░, рдореБрдЭреЗ рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХреЗрд╡рд▓ null рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ: () => null рдпрд╛ let x = null рдпрд╛ function y() { return null } ред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ any рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

  1. рдпрд╣ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИред
  2. рд╡реИрд╕реЗ рднреА рд╡реЗ рд╕рднреА рдорд╛рдорд▓реЗ noImplicitAny рддрд╣рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред
  3. рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬреАрдм рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: (): null => null рдпрд╛ let x: null = null рдпрд╛ function y(): null { return null } ред

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

рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ string рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд░реНрде рд╣реИ string! | null рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ ( string рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЕрд░реНрде рдирд╣реАрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рдерд╛ рдХрд┐ рдлрд┐рд░ рднреА, рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рд╡реИрд╕реЗ рднреА рддреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЕрдкрдирд╛рдирд╛ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдореИрдВ string? рд╕реЗ рдЕрдзрд┐рдХ string! string? рд╡рд┐рдХрд▓реНрдк string! рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд▓реАрдирд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ :(

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

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

[1] рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдкреЗрд╢ рдХрд░рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╣рд╛рдВ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди:

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

@jods4

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

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

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

рдХрд┐рд╕ рдорд╛рдзреНрдпрдо рд╕реЗ? рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓-рджрд░-рдлрд╝рд╛рдЗрд▓ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

@impinball

рдХрд┐рд╕ рдорд╛рдзреНрдпрдо рд╕реЗ? рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓-рджрд░-рдлрд╝рд╛рдЗрд▓ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБред рдореИрдВрдиреЗ рдХрднреА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдореБрдЭреЗ // <strong i="9">@module</strong> amd рдЬреИрд╕реА рдмрд╣реБрдд рд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдорд╛рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ ts рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХрднреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реВрдБ! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ:
https://github.com/Microsoft/TypeScript/blob/master/tests/cases/conformance/externalModules/amdImportAsPrimaryExpression.ts

рдпрджрд┐ рдпрд╣ рдкреНрд░рддрд┐-рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред .d.ts рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓, _at рдХрдо рд╕реЗ рдХрдо_ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрд╡рд░реВрдкрд┐рдд рдЯрд┐рдкреНрдкрдгреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА /// <amd-dependency /> рдФрд░ рд╕рд╣ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред

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

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реАрдорд╛рдПрдБ рднреА рд╣реИрдВ - рдпрд╣ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдФрд░ IIUC рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдЙрд╕реА рдкрд╛рд╕ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ AST рдирд┐рд░реНрдорд╛рдг рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ /// <amd-dependency /> рдФрд░ /// <amd-module /> рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред /// <non-null-types /> рдЬреИрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдареАрдХ рд╣реИ, рдпрд╣ рднрдпрд╛рдирдХ рдирд╛рдордХрд░рдг рд╣реИ рдФрд░ рдореИрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ "рдЬрд╛рджреВ" рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИред

@ jods4 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @I 'рдореА рдкрд┐рдирдмреЙрд▓ рдХрд╣ рд░рд╣реА рд╣реИ рдХрд┐ IDEs рдХреИрд╕реЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдореЗрдВ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

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

declare module Nothing { export const enum Brand {} }
interface Nothing { 'a brand': Nothing.Brand }
export type Nullable<a> = a | Nothing;
var nothing : Nothing = null;
export function isNothing(value: Nullable<a>): value is Nothing {
    return value == null;
}
var something = Math.random() > 0.5 ? 'hey!' : nothing;
if (isNothing(something)) {
    // missing value
    // there is no way you can get anything out of it
    // there is also NO WAY to get a null reference exception out of it
    // because it doesn't have any methods or properties that could be examined
    // it is 100% explicit and typesafe to use
} else {
    // value is present, it is 100% GUARANTEED being NON-NULL
    // you just CANT get a null reference exception here either
    console.log(something.toLowerCase());
}

/** turns any unsafe values into safe ones */
export function sanitize<a>(unsafe: a) : Nullable<a> {
    return unsafe;
}

var safe = sanitize(toResultFromExternalCodeYouCannotTrust()); // <-- 100% safe to use

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╕ рдмрдВрдж, рдХреНрд▓рд╛рд╕ рдЦрд╛рд░рд┐рдЬред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдХрд╣рд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

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

рдореИрдВ _not_ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ var x: number рдХреЛ Nullable<number> рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ NonNullable<x> рд▓рдкреЗрдЯрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЕрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрд░рд┐ рд╣реИред рдлрд┐рд░ рднреА рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ x *= 2 рдХрд░рдирд╛ 100% рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдХреЛрдб рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ _not_ _рд╣рд░_ рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ sanitize рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЛрдо рдПрдкреАрдЖрдИ, рдЬрд┐рд╕реЗ рдореИрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ isNothing(safe) _all the place_ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ let squares = [1,2,3].map(x => x*x) рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ squares.length рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ _any_ API рдХреЗ рд╕рд╛рдеред

рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдореИрдВ рддреГрддреАрдп рдкрдХреНрд╖ рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди null рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореИрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ $(element).css(null) рдареАрдХ рд╣реИ рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИред

рдореИрдВ рдЯреАрдо рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЖрдкрдХреЗ рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рдкреИрдЯрд░реНрди рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХрд╛ Nulllable рдкреНрд░рдХрд╛рд░ рдПрдХ рджреЗрд╡ рдХреЛ let x: number = null; x.toString() (рдпрд╛ рдХреБрдЫ рдХрдо рдмреЗрд╡рдХреВрдл, рд▓реЗрдХрд┐рди рдЙрд╕реА рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП) рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЧреЗ рднреАред рдпрд╣ рдЯрд┐рдХрдЯ рдмрдВрдж рд╕реЗ _far_ рджреВрд░ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА 100% рд╣реИред

рдЖрдк рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ, рд╣реИ рдирд╛?

рдореИрдВ рдХрд╛рдлреА рдЧрдВрднреАрд░ рд╣реВрдВред

рдореИрдВ рд╣рд░ рдПрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ ...

рдХреНрдпреЛрдВ рдирд╣реАрдВ? ! рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рд▓реЛрдЧ рдЬреЛрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ NonNullable

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

рдпрд╣ рдЕрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрд░рд┐ рд╣реИред

рдХрд╣рд╛рдВ?

рдЖрдкрдХрд╛ рдХреЛрдб рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЛрдо рдПрдкреАрдЖрдИ, рдЬрд┐рд╕реЗ рдореИрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдкрд░ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ Nullable<*> рд╕рд╛рде рд╢реВрдиреНрдп рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдмрджрд▓рдХрд░ рдЙрд╕ рддреГрддреАрдп рдкрдХреНрд╖ lib рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИ

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

рд╡рд╣реА рдЪреАрдЬред рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╕рд╛рджреЗ string рдмрдЬрд╛рдп Nullable<string> рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

рдЖрдкрдХрд╛ Nullable рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рджреЗрд╡ рдХреЛ let x: number = null; x.toString ()

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

рдЖрдУ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди 95% рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ 100% рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдФрд░ рдпрд╣ рдХрдард┐рди рдирд┐рд░реНрдгрдп рд▓рд┐рдП рдмрд┐рдирд╛ рдФрд░ рд╕рднреА рдХреЛ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд▓рд╛рдП рдмрд┐рдирд╛ рдЖрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕рдорд╛рдзрд╛рди рдЬреЛ рд╡рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдЬреЛ рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬреИрд╕реЗ рдЖрдк рд╢реАрд░реНрд╖ рдкрд░ рд╕рднреА рдмреИрдХ рдЬреИрдХ рдФрд░ рдЪреЗрд░реА рдХреЗ рд╕рд╛рде рдЪрд╛рд╣рддреЗ рд╣реИрдВ

1.4 рдФрд░ 1.5 рдореЗрдВ, рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдп рдХреЛ .toString () рд╕рд╣рд┐рдд рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп type Nothing = void; рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬрдм рддрдХ рдХрд┐ рдпрд╣ 1.6 рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛)ред http://bit.ly/1OC5h8d

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

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

if (isNothing(something)) {
  console.log(something.toString())
}

рдореИрдВ рд╣рд░ рдПрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ ...

рдХреНрдпреЛрдВ рдирд╣реАрдВ? рд╕рд╛рде ! рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рд▓реЛрдЧ рдЬреЛрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рд╡реИрд╕реЗ рднреА рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ NonNullable

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

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдЕрд╢рдХреНрдд рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╕реНрдерд┐рд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ toString() рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░ рд╢реВрдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред
рд╡рд╣рд╛рдВ рдЖрдкрдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИрдВ?
let x: string = a.toString();
рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕реНрдерд┐рд░ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИ рдХрд┐ x.length рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдмрд┐рд▓реНрдЯ-рдЗрди string рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ null рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ _status quo_ рд╣реИред
let x = sanitize(a.toString());
рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рдВрдЪ рдХреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдб _is_ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд░ рдЬрдЧрд╣ if (isNothing(x)) рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ! рдпрд╣ рдмрджрд╕реВрд░рдд рдФрд░ рдЕрдХреНрд╖рдо рджреЛрдиреЛрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ x рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИред (<string>x).length рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдмрджрд╕реВрд░рдд рд╣реИ рдХрд┐ рдХрд╣реАрдВ рднреА рдЖрдк x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ:

let x = a.toString(); // documented, non-null type string (string! if you want to)
x.length; // statically OK

рдЖрдк рдЗрд╕реЗ рдЙрдЪрд┐рдд рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ JS (рдФрд░ TS 1.6) рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдЕрд╢рдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред

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

рдпрд╣ рдЕрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрд░рд┐ рд╣реИред

рдХрд╣рд╛рдВ?

рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рдЙрддреНрддрд░ рджреЗрдЦреЗрдВред

рдЖрдкрдХрд╛ рдХреЛрдб рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЖрдзреА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдЕрд╢рдХреНрдд рдЗрдирдкреБрдЯ рдпрд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ X рдХреЗ рдмрдЬрд╛рдп Nullable<X> рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рднреА null рдХреЛ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ null рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдареАрдХ рд╣реИ рдпрд╣ рддрдереНрдп рдЕрдм _documented_ рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JSDoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ _enforced_ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЙрджрд╛рд╣рд░рдг: declare find<T>(list: T[], predicate: (T) => bool) ред рджреЛрдиреЛрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рдореИрдВрдиреЗ Nullable рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рдлрд┐рд░ рднреА рдореИрдВ find(null, null) рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдШреЛрд╖рдгрд╛ рдХрд╣рддреА рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд┐рдзреЗрдп рд╕реЗ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп bool рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рднреА рдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: find([], () => null) ред

рдЖрдкрдХрд╛ Nullable рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рджреЗрд╡ рдХреЛ let x: number = null; x.toString ()

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

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

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

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

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

рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред

рд╡рд╣реА рдЪреАрдЬред рд╡рд╣реА рдЪреАрдЬред

рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╣реИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ, рдмрд╕ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ

рдпрджреНрдпрдкрд┐ рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ toString рд╕реЗ Object , рд▓реЗрдХрд┐рди .. рдЕрдЧрд░ рд╣рдо @Arnavion рдХрд╛ рд╡рд┐рдЪрд╛рд░ Nothing рд▓рд┐рдП void рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛) Nothing ) рдпрд╣ рд╕рдм рдЕрдЪрд╛рдирдХ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ

рдШрдбрд╝реА

image

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

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

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡
рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рдЫреЗрдж рдмрддрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ null рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддрд░рд╣) void рд╕реЗ)ред

рдЕрдВрдд рдореЗрдВ _maybe_ рдЖрдк рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдк рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЖрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ null рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рдХреЛ рд▓рд┐рдВрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдВрддрддрдГ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЧреИрд░-рдорд╛рдирдХ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдХреЛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реИ (рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдпрд╣ рд╢реВрдиреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЗ _all_ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЪ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЖрдкрдХреА)ред

рдЕрдВрдд рдореЗрдВ рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд null рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдШреБрдорд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪреЗрдХ рд╣рдо рдЖрдкрдХреЗ Nothing рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

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

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

рдХреНрдпрд╛ рдореИрдВ рдЕрдм рднреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛рдПрдВ рд╣реЛрдВ? рдкрдХреНрдХреА рдмрд╛рдд рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБред

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

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╕ рдмрдВрдж, рдХреНрд▓рд╛рд╕ рдЦрд╛рд░рд┐рдЬред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдЖрдк рдХреА рддрд░рд╣ рдореБрдЭреЗ рдЕрдм рднреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рджрд┐рди TS рдХреЛ рдХреБрдЫ рдЙрдЪрд┐рдд рд╕рдорд░реНрдерди рдорд┐рд▓реЗрдЧрд╛ред рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд▓реНрдж рд╣реА рдирд╣реАрдВ, рдЖрдк рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ)ред C# рдЯреАрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд╣реА рд╡рд┐рдЪрд╛рд░-рдордВрдерди рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рд╕реА # 7 рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдЕрднреА рддрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ) рддреЛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рддреЛ рд╕рд░рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

var nothing: void = null;
function isNothing<a>(value: a | void): value is void {
    return value == null;
}
var something = Math.random() > 0.5 ? 'hey!' : nothing;

рдФрд░ рдЕрдм рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд░реИрдкрд░ рдХреЗ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рдпрд╣ рдореВрд▓ рд░реВрдк рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реЛрдиреЗ рддрдХ рдереЛрдбрд╝реЗ рдЦреБрд╢ рдХрд┐рдпрд╛ ред

рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ ! рдЬрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛред рдпрд╣ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?

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

рдореИрдВ " --noImplicitNull " рдХреА рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрдЧрд╛ред рдпрджрд┐ "!" рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрдЪреЗрдХрд░ рдХреЛ рдирд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд╕реНрдЯ) - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдИрдПрд╕ 7+ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдореЗрдВ "рдЕрдВрддрд┐рдо рдкреНрд░реЗрд╖рдг" рдСрдкрд░реЗрдЯрд░ рд╡рд╛рджреЗ рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд┐рдЪрд╛рд░ред

рдЕрдЧрд░ рдпрд╣ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрддрддрд╛ рдЯреВрдЯрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдЯреНрдЯрд░рдкрдВрдереА рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдЧрд▓рддреА рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдВрдЯрд╛ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддрдирд╛ рдХрдЯреНрдЯрд░рдкрдВрдереА рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "!" рдЕрдзрд┐рдХ рдХрдЯреНрдЯрд░рдкрдВрдереА рд╣реИ: рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВ; --noImplicitNull рдЕрдзрд┐рдХ рдХреНрд░рдорд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЛ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓реЗрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЕрд╢рдХреНрдд рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рдЕрдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЧрдП рдЪреЗрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ .

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

  • рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд░реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ '?' рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ
  • рдмрд╛рд╣рд░реА рдЪрд░ рдЕрд╢рдХреНрдд рд╣реИрдВ, рдПрдХ '!!' рдУрд╡рд░рд░рд╛рдЗрдб
  • рдПрдХ рдирд▓ рдЪреЗрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд╕реНрдЯ рд╣реИ
  • рдмрд╛рд╣рд░реА рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

рддреБрд▓рдирд╛ рдХрд░рдирд╛:
1
2

  • рдЕрдЧрд░ a|void рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рднреА a|Nothing рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

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

  • рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ 100% рд╡реИрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИрдХ рдХреНрдпреЛрдВ рд╣реИ
  • рд╕рдореБрджрд╛рдп рдХреЗ рдХреМрд╢рд▓ рдХреЛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡ рди рджреЗрдВ, рдХрдИ (рдпрджрд┐ рдЕрдзрд┐рдХрддрд░ рдирд╣реАрдВ) рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдирд┐рдореНрди рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡реЗ рднреА рдХрд╣рддреЗ рд╣реИрдВ, jQuery рдХреЛ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рдлрд┐рд░ рд╕реЗ, рдПрдХ рдкреИрдЯрд░реНрди рдХрднреА рднреА рдПрдХ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ
  • рдПрдХ рдкреИрдЯрд░реНрди рдЖрдЬ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдирд┐рдХрдЯ рд╣реЛ рднреА рд╕рдХрддреА рд╣реИ рдФрд░ рдирд╣реАрдВ рднреА
  • рдпрджрд┐ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ AB рдФрд░ C рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ (95% рддрдХ) рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдХреЛ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП D рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдХреБрдЫ рдЪреАрдиреА рдХреА рд▓рд╛рд▓рд╕рд╛? рд╣рдо рдЙрд╕ рдЪреАрдЬрд╝ рдкрд░ рдзреНрдпрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рдПрдХ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╡реИрд╕реЗ рднреА, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдкреВрд░реНрдгрддрд╛рд╡рд╛рджреА рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ

(рдпрджрд┐ рдЖрдк рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА class Nothing { private toString: any; /* other Object.prototype members */ } рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред #1108 рджреЗрдЦреЗрдВ)

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

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

рд╡рд░реНрддрдорд╛рди рдореЗрдВ @aleksey-bykov рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐
рдпрд╣ рднрд╛рд╖рд╛ рдХреЛрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
Object.defineProperty(null, "name", desc) - рдЖрдкрдХреЛ рд╕реЗ рдПрдХ TypeError рдорд┐рд▓реЗрдЧрд╛
null рд▓рдХреНрд╖реНрдп рд╡рд╕реНрддреБред рдПрдХ рдФрд░ рдмрд╛рдд: рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ a
null рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреИрд╕реЗ var o = null; o.foo = 'foo'; ред рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧрд╛
рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐ рдЖрдИрдЖрдИрдЖрд░рд╕реАред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


_рдЕрдм, рдереЛрдбрд╝реА рд╣рд▓реНрдХреА рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ..._

рдФрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ "?string" рдФрд░ . рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдкрд╕рдВрдж рд╣реИ
"!рд╕реНрдЯреНрд░рд┐рдВрдЧ" рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рддрдм рддрдХ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдореИрдВ рд╣реВрдВ
ThisIsANullableType<T, U, SomeRidiculousAndUnnecessaryExtraGeneric<V, W>> рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред

рдмреБрдзрд╡рд╛рд░ рдХреЛ 29 рдЬреБрд▓рд╛рдИ, 2015, 16:10 рдЕрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

  • рдЕрдЧрд░ a|void рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ рддреЛ рдХреЛрдИ рдПрдХ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ|рдХреБрдЫ рднреА рдирд╣реАрдВ

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

    рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ 100% рд╡реИрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИрдХ рдХреНрдпреЛрдВ рд╣реИ

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

    рдЕрдХреНрд╕рд░ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

    рдлрд┐рд░ рд╕реЗ, рдПрдХ рдкреИрдЯрд░реНрди рдХрднреА рднреА рдПрдХ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрд╢рд╛ рд╣реИ

    рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╢рдХ рдирд╣реАрдВ

    рдПрдХ рдкреИрдЯрд░реНрди рдЖрдЬ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ

    рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдирд╛

    рдпрджрд┐ рдПрдмреА рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ (95% рддрдХ) рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    рдФрд░ рд╕реА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рднреА рдбреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдХреБрдЫ рдЪреАрдиреА рдХреА рд▓рд╛рд▓рд╕рд╛? рдХреНрдпреЛрдВ рд╣реЛрддрд╛
    рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдПрдХ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╡реИрд╕реЗ рднреА, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдкреВрд░реНрдгрддрд╛рд╡рд╛рджреА рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -126082053
.

рдФрд░ рдХреНрдпрд╛ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдЗрдХ рд╢реЗрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреА, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕ рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдирд╛ рд╣реИ? рдкрд╣рд▓реА ~ 10 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рдЕрдм рддрдХ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рджреЗрдЦрд╛ рд╣реИ, рд╡рд╣ рд╣реИ "рдЕрд░реЗ, рд╣рдо рдПрдХ рдмрд╛рдЗрдХ рд╢реЗрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕ рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдирд╛ рдЪрд╛рд╣рд┐рдП?" рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рд╣реИред (рдЗрд╕рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП #3192 рдФрд░ #1206 рдХреА рдкрд╣рд▓реА рдЫрдорд╛рд╣реА рджреЗрдЦреЗрдВ - рдЬрдм рдореИрдВрдиреЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдпрд╛ рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢реЛрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред)

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

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

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

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ: рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреЗ рд▓рд┐рдП рджреЛ-рдЪрд░рдг рдЯрд╛рдЗрдкрд┐рдВрдЧрдмреЛрд▓реА
рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢реЛрдзрди рдкреНрд░рдХрд╛рд░
рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
("рдЖрд╢реБрд▓рд┐рдкрд┐ рдЯреА? рдЯреА + рдирд▓ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред" ; #186 рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ)

@afrische рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JS рдЯрд╛рдЗрдк рдЪреЗрдХрд░реНрд╕ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓реЛ "рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ" рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрд╣рд╛рд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ WIP JS рдЯрд╛рдЗрдк рдЪреЗрдХрд░ Infernu рднреА рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ Hindley-Milner рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди 1 рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдкреАрдЫреЗ рд╣рдЯрд╛...

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

рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЯреАрдПрд╕ рдХрд╛рдВрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдпрд╣ (рдореМрдЬреВрджрд╛) рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ null рд╕рд╛рде рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП string | null ред рдореИрдВрдиреЗ string? рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рднреА рдЬреЛрдбрд╝рд╛ рдЬреЛ рдХрд┐ рд╕рдорд╛рди рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред

рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ @aleksey-bykov рдЬреИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ null Nothing рдкреНрд░рдХрд╛рд░, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдФрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рднреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рдм рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдЬрд╣рд╛рдВ рдЪреАрдЬреЗрдВ рдмрд╛рд▓реЛрдВ рд╡рд╛рд▓реА рд╣реЛрддреА рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдЖрд╕рд╛рди рд╕рдВрдХреНрд░рдордг рдкрде рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдХреБрдЫ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, _at рдХрдо рд╕реЗ рдХрдо_ рдореМрдЬреВрджрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдзреНрд╡рдЬ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЕрд░реНрде - рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╣реЗрдВ - рдХрд┐рдпрд╛ ' t рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЭрдВрдбреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ string? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ @afrische рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд▓реЗрдХрд┐рди string! рдореЗрдВ .d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдордирдорд╛рдиреА рджреНрд╡реИрдд рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬреЛ рдпрд╣ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВ string рдЕрд╢рдХреНрдд рдФрд░ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ? рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рдЕрдЧрд░ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдирд╣реАрдВред
рдореБрдЭреЗ @impinball рдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдСрдкреНрдЯ-рдЖрдЙрдЯ рдлрд╝реНрд▓реИрдЧ рд░рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ (

рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЪрд┐рдВрддрд╛рдПрдВ рд▓рдЧрднрдЧ 300 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЯреАрдПрд╕ рдЯреАрдо рд╕реЗ рдХреБрдЫ рд╣реА рд╣реИрдВред

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

рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ ! рдФрд░ ? рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдЬрдмрдХрд┐ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдпрд╣ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ :

рдкреНрд░рд╕реНрддрд╛рд╡

declare var foo:string // nullability unspecified
declare var foo:?string // nullable
declare var foo:!string // non-nullable

рд╕рд╛рде ?string рдПрдХ рдХреЗ рд╕реБрдкрд░рд╕реЗрдЯ !string , рдФрд░ string рдпрд╛рдиреА рдмреАрдЪ рдХреЗ рд░рд┐рд╢реНрддреЗ рджреЛрдиреЛрдВ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рджреЛрдиреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ, string рдФрд░ рджреЛрдиреЛрдВ ?string рдФрд░ !string any рдФрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрд░реНрдерд╛рдд ! рдпрд╛ ? рдмрд┐рдирд╛ рдПрдХ рдирдВрдЧреЗ рдкреНрд░рдХрд╛рд░ any рдЕрд╢рдХреНрддрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:

| рдкреНрд░рдХрд╛рд░ | рд╢рд╛рдорд┐рд▓ рд╣реИ | рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ | null рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? | рдирд╣реАрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ null ? |
| --- | --- | --- | --- | --- |
| T | T , !T , ?T | T , ?T , !T | рд╣рд╛рдБ | рд╣рд╛рдБ |
| ?T | T , !T , ?T | T , ?T | рд╣рд╛рдБ | рдирд╣реАрдВ (рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) |
| !T | T , !T | T , ?T , !T | рдирд╣реАрдВ | рд╣рд╛рдБ |

рдпрд╣ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ any рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг

рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐ рд╡рд╛рд▓рд╛ рдХреБрдЫ рдХреЛрдб рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

function test(foo:Foo) { foo.method(); }
test(null);

рдпрд╣ рдХреЛрдб рдЕрднреА рднреА рдЧреБрдЬрд░рддрд╛ рд╣реИред null рдЕрднреА рднреА Foo рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ Foo рдХреЛ рдЕрднреА рднреА рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

function test(foo:!Foo) { foo.method(); }
test(null);

рдЕрдм test(null) рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ null !Foo рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

function test(foo:?Foo) { foo.method(); }
test(null);

рдЕрдм foo.bar() рддреНрд░реБрдЯрд┐ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ?Foo рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдХреЛрдб рдХреЛ null рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд▓рд┐рдП,
рдХреНрдпрд╛ рд╣рдо ?T рдФрд░ T рдХреЗрд╡рд▓ рдЙрдкрдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ Array<T> рдФрд░ T[] ? рдпрд╣
рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдШреЛрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╣реИ
рдЕрд╢рдХреНрддред

рд╢реБрдХреНрд░, рдЕрдЧрд╕реНрдд 28, 2015, 07:14 рдХреЛ рдЬреЗрд╕реА рд╢рд╛рд▓реНрдХреЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рдХреНрдпрд╛ рд╣реИрдВ
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЪрд┐рдВрддрд╛рдПрдВ рд▓рдЧрднрдЧ 300 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╣реИрдВ
рдЯреАрдПрд╕ рдЯреАрдо рд╕реЗ рд╣реАред

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

рдкреВрд░реЗ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ
рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде! рддрдерд╛ ? рдЕрд╢рдХреНрддрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП
рдЙрдирдХреЗ рдЕрднрд╛рд╡ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:
рдкреНрд░рд╕реНрддрд╛рд╡

var foo рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ string // рдЕрд╢рдХреНрдд, рдШреЛрд╖рд┐рдд var foo:!string // рдЧреИрд░-рд╢реВрдиреНрдп

?рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде !рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ, рдФрд░ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рд╕рдмрд╕реЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░реЗрдВ
рджреЛрдиреЛрдВ рдХрд╛, рдпрд╛рдиреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз?рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ !рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдХрд┐рд╕реА рднреА рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрд░реНрдерд╛рдд a
рдмрд┐рдирд╛ рдирдВрдЧреЗ рдкреНрд░рдХрд╛рд░! рдпрд╛ ? рд╢реВрдиреНрдпрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд┐рд╕реА рдХреА рддрд░рд╣ рд╣реИред

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

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

рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐ рд╡рд╛рд▓рд╛ рдХреБрдЫ рдХреЛрдб рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдлрд╝рдВрдХреНрд╢рди рдЯреЗрд╕реНрдЯ (рдлреВ: рдлреВ) {foo.method (); }рдкрд░реАрдХреНрд╖рдг (рд╢реВрдиреНрдп);

рдпрд╣ рдХреЛрдб рдЕрднреА рднреА рдЧреБрдЬрд░рддрд╛ рд╣реИред рдирд▓ рдЕрднреА рднреА рдлреВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдлреВ рдЕрднреА рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрдВрдХреНрд╢рди рдЯреЗрд╕реНрдЯ (рдлреВ:!рдлреВ) {foo.method (); }рдкрд░реАрдХреНрд╖рдг (рд╢реВрдиреНрдп);

рдЕрдм рдкрд░реАрдХреНрд╖рдг (рдирд▓) рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд▓ !Foo рдХреЛ рдЖрдмрдВрдЯрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдлрдВрдХреНрд╢рди рдЯреЗрд╕реНрдЯ (рдлреВ:?рдлреВ) {foo.method (); }рдкрд░реАрдХреНрд╖рдг (рд╢реВрдиреНрдп);

рдЕрдм foo.bar() рддреНрд░реБрдЯрд┐ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдЪрд╛рд▓реВ рд╣реИ? рдлреВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
(рдпрд╛рдиреА рдХреЛрдб рдХреЛ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -135743011
.

@impinball

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣рдо ?T рдФрд░ T рдХреЗрд╡рд▓ рдЙрдкрдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ Array<T> рдФрд░ T[] ? рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдШреЛрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╣реИред

_рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░_ рдпрд╣ рд╣реИ рдХрд┐ T , ?T рдФрд░ !T рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдФрд░ рд╡рд╣ _is_ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП (рдореМрдЬреВрджрд╛ TS рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛)ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдореЗрдЬ рдФрд░ рд╕рдм рдХреБрдЫ рдмрдирд╛рдпрд╛ рд╣реИред

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

рд╢реБрдХреНрд░, рдЕрдЧрд╕реНрдд 28, 2015, 11:43 рдХреЛ рдЬреЗрд╕реА рд╢рд╛рд▓реНрдХреЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@impinball https://github.com/impinball

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд▓рд┐рдП,
рдХреНрдпрд╛ рд╣рдо ?T рдФрд░ T рдХреЗрд╡рд▓ рдЙрдкрдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ ArrayрдФрд░ рдЯреА[]? рдпрд╣ рд╣реЛрдЧрд╛
рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ, рдФрд░ рдЕрдШреЛрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╣реИред

_рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░_ рдпрд╣ рд╣реИ рдХрд┐ T, ?T рдФрд░ !T рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ,
рдФрд░ рд╡рд╣ _is_ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП (рдореМрдЬреВрджрд╛ TS . рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛)
рдХреЛрдб)ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдмрдирд╛рдпрд╛ рд╣реИ
рдЫреЛрдЯреА рдореЗрдЬ рдФрд░ рд╕рдм рдХреБрдЫред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -135810311
.

рд╕реНрдорд╛рд░реНрдЯ рдЧрдзрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ

?string рдХрд╛ рд╕реБрдкрд░рд╕реЗрдЯ !string , рдФрд░ string рджреЛрдиреЛрдВ рдХрд╛ рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рд╕рдмрд╕реЗрдЯ рджреЛрдиреЛрдВ

рд╕рдореБрдЪреНрдЪрдп рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдореБрдЪреНрдЪрдп A рдПрдХ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣реИ рдФрд░ рд╕рдореБрдЪреНрдЪрдп B рдХрд╛ рдЕрддрд┐рд╕рдореБрдЪреНрдЪрдп рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдФрд░ рдХреЗрд╡рд▓ рдЬрдм A = B

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЬрдм рдЖрдк "рджреЛрдиреЛрдВ рдХрд╛" рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рд╕рдм рдХреБрдЫ-рдХреА-?рд╕реНрдЯреНрд░рд┐рдВрдЧ = рд╕рдм рдХреБрдЫ-рдХреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рд╕рдм рдХреБрдЫ-рдХреА-!рд╕реНрдЯреНрд░рд┐рдВрдЧ = рд╕рдм рдХреБрдЫ-рдХреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рддреЛ рдЕрдВрддрддрдГ рд╕рдм рдХреБрдЫ-рдХреА-?рд╕реНрдЯреНрд░рд┐рдВрдЧ = рд╕рдм рдХреБрдЫ-рдХреА-!рд╕реНрдЯреНрд░рд┐рдВрдЧ

рдЬрд╣рд╛рдВ рд╕реЗ рд╕рднреА рдЙрддрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИ, рдмрд╕ рд╕реЗрд╡рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ рд╢рд╛рдпрдж рдЦрд░рд╛рдм рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ string рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ ?string | !string , рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдореЗрдп рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реБрдПред

рдпрд╣ рдкреВрд░реА рдмрд╛рдд рдЬрд╛рд╡рд╛ рдХреЗ рддреЗрдЬреА рд╕реЗ рдЖрдо @Nullable рдФрд░ @NonNull / @NotNull рд╕рдВрдХрд▓рди-рд╕рдордп рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдЕрдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрджрд┐рдо рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдзреНрд╡рдЬ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

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

@impinball

рд▓реЛрдЧ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдХрд╣рд╛рдиреА рдкреБрд░рд╛рдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рд╛рде рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдХрдард┐рди рд╣реИ (рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╡рд░реНрддрдорд╛рди рдЯреАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреБрдЪреНрдЫ рд╣реИрдВ)ред

рдЕрдЧрд░ рд▓реЛрдЧ рдкреБрд░рд╛рдиреЗ рдЯреАрдПрд╕ рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреБрд░рд╛рдиреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ)ред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рд╡реИрд╕реЗ рднреА рдЯреВрдЯрдиреЗ рд╡рд╛рд▓реА рд╣реИрдВред рдЬрд▓реНрдж рд╣реА TS 1.6 рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреАред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд▓реЛрдЧ 1.4 рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ, 1.5 рдореЗрдВ рдкреНрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рд╕реНрдорд╛рд░реНрдЯ рдЧрдзрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ

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

any рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрдкрд░рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ)ред any рдЕрд░реНрде рд╣реИ "рдЗрд╕ рдорд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рд╕реЗ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░реЗрдВ"ред

string рдХреЛ !string рдпрд╛ ?string рджреЛрдиреЛрдВ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ !string рдФрд░ ?string рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ string рдЕрд░реНрде рд╣реИ "рдЗрд╕ рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрддрддрд╛ рдЬрд╛рдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛", рдпрд╛рдиреА рд╡рд░реНрддрдорд╛рди рдЯреАрдПрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ред

@impinball

рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрджрд┐рдо рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдзреНрд╡рдЬ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

@RyanCavanaugh рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛:

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдорд╛рди рд░рдЦрдирд╛ рдФрд░ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╣реИ рдЙрд╕реЗ рдмрджрд▓рдирд╛ рдмрдирд╛рдо рдЬреЛ рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╣реАрдВ рд╣реИ, рдмрд╣реБрдд рдХреБрдЫ рдЬреИрд╕реЗ noImplicitAny рдЖрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

@jesseschalken

рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ null рдпрд╛ undefined :

var a = new Type(); // type: !Type
var b = 2; // type: !number
var c = 'string'; // type: !string
// etc...

рдЧрд▓рддрдлрд╣рдореА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рд╢реБрдХреНрд░, рдЕрдЧрд╕реНрдд 28, 2015, 19:54 рдХреЛ рдЬреЗрд╕реА рд╢рд╛рд▓реНрдХреЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@impinball https://github.com/impinball

рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдзреНрд╡рдЬ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд░рд╣реВрдВрдЧрд╛
рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЧреИрд░-рдЕрд╢рдХреНрдд, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрджрд┐рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

@RyanCavanaugh https://github.com/RyanCavanaugh рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛:

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

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рд░рдЦрдирд╛ рд╣реИ
рд╕рдордиреБрджреЗрд╢реНрдпрддрд╛ рд╕рдорд╛рди рд╣реИ рдФрд░ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╣реИ рдЙрд╕реЗ рдмрджрд▓ рджреЗрдВ рдмрдирд╛рдо рдЬреЛ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ
рдПрдХ рдЭрдВрдбреЗ рдкрд░, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдЖрдЬ noImplicitAny рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдХрдореА рд╣реИ
рдПрдХ рдЕрд╢рдХреНрддрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ (! рдпрд╛?) рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП _only_ рд╕реБрд░рдХреНрд╖рд┐рдд рдзреНрд╡рдЬ рд╣реЛрдЧрд╛
рдПрдХ рдЬреЛ рдЕрд╢рдХреНрддрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреА рдХрдореА рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдХреЗрд╡рд▓
рдкрд╛рд╕рд┐рдВрдЧ рдХреЛрдб рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдореИрдВ
рдорд╛рди рд▓реЗрдВ рдХрд┐ noImplicitAny рдХреЛ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереАред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -135916676
.

@jeffmcaffer рд╢рдмреНрджреЛрдВ рдХреЗ рдореВрд▓ рдЕрд░реНрде рдХреЛ рдмрджрд▓рдХрд░ рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рд╕рдмрд╕реЗрдЯ рдХреЗ рдореВрд▓ рдЕрд░реНрде рдХреЛ рдмрджрд▓рдХрд░ рдЖрдк рдЬреЛ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдЕрднреА рднреА рд╕реЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: string рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯ !string рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдШ рд╣реИ !string рдФрд░ ?string рдЕрд░реНрде рд╣реИ !string рдпрд╛/рдФрд░ ?string рд╕реЗ рдХреБрдЫ рднреА string

@impinball рдлрд┐рд░, рдРрд╕рд╛ рдзреНрд╡рдЬ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджреЗрдЧрд╛, рдЬреЛ ( @RyanCavanaugh рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ) рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред export var b = 5; рдЕрдм рдПрдХ !number рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рдпрд╣ number рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рдерд╛ред

рд╣рд╛рдБ, рдПрдХ рдорд╛рдпрдиреЗ рдореЗрдВред рдереЛрдбрд╝рд╛ рдФрд░ рддрдХрдиреАрдХреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрдШ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдпрд╣ рдЪреМрд░рд╛рд╣реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ a . рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
string , рдФрд░ рдПрдХ string рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╢реБрдХреНрд░, рдЕрдЧрд╕реНрдд 28, 2015, 20:20 рдХреЛ рдЕрд▓реЗрдХреНрд╕реА рдмрд╛рдпрдХреЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@impinball https://github.com/impinball рдЖрдк рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ
рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рд╕рдмрд╕реЗрдЯ рд╢рдмреНрджреЛрдВ рдХреЗ рдореВрд▓ рдЕрд░реНрде рдХреЛ рдмрджрд▓рдирд╛ рдЕрднреА рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕реЗрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ рд╕реЗрдЯ рд╣реИ a
_union_ !string рдФрд░ ?string рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ !string . рд╕реЗ рдХреБрдЫ рднреА рдЕрд░реНрде рд╣реИ
рдпрд╛/рдФрд░ ?рд╕реНрдЯреНрд░рд┐рдВрдЧ string . рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -135920233
.

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

рд╢реБрдХреНрд░, рдЕрдЧрд╕реНрдд 28, 2015, 20:21 рдХреЛ рдЬреЗрд╕реА рд╢рд╛рд▓реНрдХреЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@impinball https://github.com/impinball рдлрд┐рд░ рд╕реЗ, рдРрд╕рд╛ рдЭрдВрдбрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛
рдореМрдЬреВрджрд╛ рдХреЛрдб рдХрд╛ рдЕрд░реНрде, рдЬреЛ (рдкрдврд╝рдиреЗ рд╕реЗ @RyanCavanaugh
https://github.com/RyanCavanaugh рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ) рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдирд┐рд░реНрдпрд╛рдд рд╡рд┐рд╡рд┐рдзрддрд╛
рдмреА = 5; рдЕрдм рдПрдХ !рдирдВрдмрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рдпрд╣ рдПрдХ рдирдВрдмрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рдерд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -135920315
.

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред

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

рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЕрд╢рдХреНрддрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдирд╣реАрдВ рд╣реИ ( ? рдпрд╛ ! )ред

@jesseschalken
рдпрджрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рдЕрд░реНрде рдХреЛ 100% рдирд┐рд╖реНрдард╛ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ), рддреЛ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ ? рдФрд░ ! рдбрд╛рд▓рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рднреА рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред let x = 3 рдЕрдиреБрдорд╛рди рдЖрдЬ number рд╣реИред рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдЬреЛ рдореИрдВ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред

рдЬрдм рд▓рд╛рдн рдХрдорд┐рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рддреЛ рдХреБрдЫ рд░рд┐рдпрд╛рдпрддреЗрдВ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ @impinball рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, TS рдЯреАрдо рдиреЗ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ noImplicitAny ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдзреНрд╡рдЬ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдирдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЗрд╡рд▓ TS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рднреА рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб noImplicitAny рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░ рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖ)ред

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

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

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

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

рддреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ:

  • -noImplicitNull рдХреЗ рд╕рд╛рде, T !T рд▓рд┐рдП рдЙрдкрдирд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ T рдХреА рдЕрд╢рдХреНрддрддрд╛ рдЕрдЬреНрдЮрд╛рдд рд╣реИред
  • рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдХрд░ рдзреНрд╡рдЬ рдкреНрд░рддрд┐-рдореЙрдбреНрдпреВрд▓ рдЖрдзрд╛рд░ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред <strong i="18">@ts</strong>:implicit_null ред рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдлреНрд▓реЛ рдкреНрд░рддрд┐-рдореЙрдбреНрдпреВрд▓ рдЖрдзрд╛рд░ рдкрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
  • рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдкрд╣рд▓реЗ -noImplicitNull рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рднреА рдореМрдЬреВрджрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ ' @ts :implicit_null' рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде
  • рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдиреАрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдпрд╛рддрд┐рдд рдФрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рддреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЙрд╕ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдпрджрд┐ рд╕реНрдкрд╖реНрдЯ рдирд▓ рд╡рд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд▓ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

  • рдПрдХ рдЪрд░рдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ T рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрд╢рдХреНрддрддрд╛ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рдорд╛рдирд╛ рдЬрд╛рдП рдФрд░ рдЖрдпрд╛рддрдХ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ?T рдпрд╛ !T рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреИрд▓реА рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВред
  • рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рднреА рдЖрдпрд╛рддрд┐рдд T рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ ?T рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдЖрдпрд╛рддрд┐рдд T рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ !T рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЧрд▓рдд рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ any рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ T ред

рд╡рд┐рдЪрд╛рд░?

@ jods4 noImplicitAny рдзреНрд╡рдЬ _does not_ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛ред

| рдХреЛрдб | рдЭрдВрдбрд╛ | рдЕрд░реНрде |
| --- | --- | --- |
| interface Foo { blah; } | | interface Foo { blah:any; } |
| interface Foo { blah; } | noImplicitAny | рддреНрд░реБрдЯрд┐, рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ |
| var foo = 'blah' | | var foo:string = 'blah' |
| var foo = 'blah' | noImplicitNull | var foo:!string = 'blah' |

noImplicitNull , рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдерд╛ рдЬрд┐рд╕реЗ рд╢реВрдиреНрдп рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реИ рдЬрд┐рд╕ рдкрд░ null _cannot_ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ noImplicitAny рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рдирд╡рд░ рд╣реИред

@RyanCavanaugh рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрди

@jesseschalken рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред
noImplicitAny рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
let double = x => x*2;
рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк noImplicitAny рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдЖрдк рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдХрд┐ x рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╣реИред рдирдП рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
let double = (x: any) => x*2 рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ let double = (x: number) => x*2 ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдИ, рдлрд┐рд░ рднреА рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдЧрд╛ (рдЬрдм рддрдХ рдХрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдЙрддреНрд╕рд░реНрдЬрди рдмрдВрдж рдирд╣реАрдВ рдХрд░рддреЗ)ред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдирд▓ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИред рдЖрдЗрдП рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдирдП рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде, T рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ рдФрд░ T? рдпрд╛ T | null рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдШ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ T рдФрд░ null ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
let foo: string; foo = null; рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл let foo = "X"; foo = null рдЬреЛ рдХрд┐ string рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рдирдпрд╛ noImplicitNull рдЭрдВрдбрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдЕрдЪрд╛рдирдХ TS рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк null рдХреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЖрдкрдХрд╛ рдХреЛрдб рдЕрднреА рднреА _the same_, рд╕рд╣реА JS рдХреЛрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЗрд░рд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
string? foo; foo = null;

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

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

@robertknight рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рд╕реЛрдЪ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред

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

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдЬ рдХреБрдЫ T рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╢рдХреНрдд рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЕрд╢рдХреНрдд рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛:

// In a strict module, function len does not accept nulls
function len(x: string): number { return x.length; }
// In a legacy module, some calls to len
let abc: string = "abc";
len(abc);

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

@ jods4 рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЛрдмрд╛рд░рд╛ рдкрдврд╝реЗрдВред рдореЗрдЬ рдкрд░ рджреЗрдЦреЛред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ foo рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ foo рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦрдХрд░ рдЖрдкрдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред noImplicitAny , рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд╕ рдХреЛрдб рд╕реЗ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред noImplicitNull , рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб _рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ_ рд╕реЗ foo рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдкреБрд░рд╛рдиреЗ рдЕрд░реНрде рдХреЗ рд▓рд┐рдП) рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд╡рд╣ foo рдХрд╛ _definition_ рдерд╛ foo _ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реАрдорд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрдХреНрд╖реЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП noImplicitNull рдзреНрд╡рдЬ рдиреЗ рдЙрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ _meaning_ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ!

рдзреНрд╡рдЬ рдиреЗ рдлреВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджрд┐рдпрд╛ред

рд╣рд╛рдВ рдпрд╣ рд╕рдЪ рд╣реИред рдпрд╣ "рдореЗрд░реЗ рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрд░ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ - рдФрд░ рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ" рд╕реЗ "рдпрд╣ рдЪрд░ рд╢реВрдиреНрдп-рдореБрдХреНрдд рд╣реИ"ред 50/50 рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдерд╛ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЕрдкрдирд╛ рдЗрд░рд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо noImplicitAny рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ: рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЕрдкрдирд╛ рдЗрд░рд╛рджрд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реАрдорд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрдХреНрд╖реЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ

рджрд░рдЕрд╕рд▓, рдЖрдо рддреМрд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдШреЛрд╖рдгрд╛ рдФрд░ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧред рдЕрднреА:

  1. рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ рд╕рдЦреНрдд рдирд▓ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рдЦреНрдд рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдФрд░ x рдЕрд╢рдХреНрдд рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрд╢рдХреНрдд _is рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ рд╕рдЦреНрдд рдирд▓ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЪреБрдирд╛ рд╣реИ рддреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдЙрдард╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдзреНрд╡рдЬ (рдЬреИрд╕реЗ noImplicitAny ) рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЕрд░реНрде рдХреЛрдб _change_ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рдмрд▓реНрдХрд┐ рд╣рдо _рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдЬ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдХреИрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЧреИрд░ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдЯреАрдо TS рдЕрдкрдбреЗрдЯ рдореЗрдВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИ!
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ:
http://blogs.msdn.com/b/typescript/archive/2015/09/02/announcing-typescript-1-6-beta-react-jsx-better-error-checking-and-more.aspx
рд╡реЗ рдПрдХ рдирдП рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ (рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдиреНрдп рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕) рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ _рдмрд┐рдирд╛_ рдирдИ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ (рд╕рднреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдорд┐рд╕рд╛рд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЧреИрд░-рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдмрд╣рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ .sts рдпрд╛ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд .sdts)ред

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

@jbondc рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдкрдврд╝рд╛ред рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдПрдирдПрдирдмреАрдбреА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп) рдореЗрдВ рдкреНрд░рд╡рд╛рд╕рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдЧреИрд░-рд╢реВрдиреНрдп рдореЗрдВ рдкреНрд░рд╡рд╛рд╕рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдЕрдзреНрдпрдпрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ (рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдорд╛рдг рдХрдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдХреНрд░рдо, рдФрд░ рдбрд╛рд░реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 1- рдХреЛрдб рдХреА рдкреНрд░рддрд┐ 1000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ 2 рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╢реВрдиреНрдп-рднрд╛рд░реА рдХреЛрдб рдореЗрдВ рднреА 10 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдиреЗрд░рд┐рдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡реЗ 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЯреАрдПрд╕ рдореЗрдВ, null рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд▓реА рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ (рдХреЛрдИ рдЧреБрдг рдирд╣реАрдВ, рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ) рдЬрдмрдХрд┐ {} рд░реВрдЯ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЧреИрд░-рд╢реВрдиреНрдп рдЬреЗрдирд░рд┐рдХ рдмрд╕ рд╣реИрдВ G<T extends {}> - рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рдЪреАрдиреА рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ var !x

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд▓реА рдореМрдЬреВрджрд╛ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд╕рд▓реА рд░рддреНрди рд╣реИред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкрдврд╝рдХрд░ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ Optional / Maybe рдкреНрд░рдХрд╛рд░ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рдореЗрдВ - рдЬреНрдпрд╛рджрд╛рддрд░ Just(Nothing) рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ T рдФрд░ рд╕рдорд░реНрдерди get рдЬреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдЪрд╛рдмреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

interface Map<T> {
  get(s:string):Maybe<T>
}

T рдХреЛ Maybe<U> рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ; рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ рддреЛ Just(Nothing) рд▓реМрдЯрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ Nothing рдорд╛рди рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдХреБрдВрдЬреА рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ Nothing рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рд╣рдо рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

interface Map<T> {
  get(s:string):T?
}

рддрдм рд▓рд╛рдкрддрд╛ рдХреБрдВрдЬреА рдФрд░ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬрдм T рд╢реВрдиреНрдп рд╣реИред

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

@jbondc рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕реБрдХреВрди рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдзреНрдпрдпрдиреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ 80% рдШреЛрд╖рдгрд╛рдПрдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИрдВ рдпрд╛ рдкреНрд░рддрд┐ KLOC (рдкреГрд╖реНрда 21) рдореЗрдВ рдХреЗрд╡рд▓ 20 рдЕрд╢рдХреНрддрддрд╛ рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИ, рдЬреЛ рдореЗрд░реА рднреА рднрд╛рд╡рдирд╛ рдереАред

: рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдФрд░ рддрд░реНрдХ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреНрд▓реАрдирд░ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рддрд╛ рд╣реИ null рдЕрдкрдирд╛ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, T рд╣реИ рдЧреИрд░-рд╢реВрдиреНрдп рдФрд░ T? рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рдп рд╣реИ T | null ред рдХреНрдпреЛрдВрдХрд┐ TS рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреВрдирд┐рдпрди рдЯрд╛рдЗрдк рд╣реИ, рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╕рд╛рдл рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ T! рдкреЗрдЪреАрджрд╛ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ред рдореИрдВ рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬрд╣рд╛рдВ T рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ, T? T | null ред рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рдЬреЛ рдПрдХ рд╢реВрдиреНрдп рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рдордиреЗ рднреА рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдЪреНрдЫреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореЙрдбрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛: function defined(x) { return x || false; } ред
рдиреЙрди-рдирд▓ рд░рд┐рд╡рд░реНрд╕рд▓ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХреЛрдИ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: function defined<T>(x: T): T! | boolean ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ defined рдПрдХ T defined рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рднрд▓реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп T рдмрд╛рдзрд╛ рд╢реВрдиреНрдп рд╣реЛ, string? рдХрд╣реЗрдВред рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЯреАрдПрд╕ рдореЗрдВ рдореЙрдбрд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ: T! , рдЕрдЧрд░ T рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ null рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ null рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рд╕рдВрдШ рдХреА рдУрд░ рд╕реЗ

@spion

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкрдврд╝рдХрд░ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ/рд╢рд╛рдпрдж рдкреНрд░рдХрд╛рд░ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИрдВ

рдЖрдк Maybe рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ null рдШреЛрдВрд╕рд▓рд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдирдП рдПрдкрд┐рд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд░реНрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдПрдкрд┐рд╕ рдХреЛ рдореИрдк рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдХрдо рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВред рднрд╛рд╖рд╛ рдХреЗ рдирдХреНрд╢реЗ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ Maybe рддрдХ рдмрдирд╛рдирд╛ рдЙрд╕ рд▓рд╛рдн рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛рдПрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рди рдЬрд╛рдПред

Maybe рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рддрд╛ рд╣реИ: рдХреНрдпрд╛ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИ рдФрд░ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реИред рдЕрдкрдирд╛ Map рдЙрджрд╛рд╣рд░рдг рд▓реЗрдирд╛ рдФрд░ C# рдХреЛ рджреЗрдЦрдирд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, Dictionary<T,K> :
bool TryGet(K key, out T value) ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╕реА # рдореЗрдВ рдЯреБрдкрд▓реНрд╕ (рд╢рд╛рдпрдж рд╕реА # 7) рдереЗ, рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣реА рд╣реИ:
(bool hasKey, T value) TryGet(K key)
рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ Maybe рдФрд░ null рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП JS рдХрд╛ рдЕрдкрдирд╛ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдирдИ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: undefined ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп JS Map рдпрджрд┐ рдХреБрдВрдЬреА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ рддреЛ undefined рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА, рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЕрдиреНрдпрдерд╛, null ред

рд╕реА#7 рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ - https://github.com/dotnet/roslyn/issues/5032

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ

рдЖрдкрдХреА рд╕рднреА рдЕрд╢рдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рдирд╣реАрдВ, рд╡реЗ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ?
рдореЗрд░реА рд╢реВрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рджреВрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдФрд░ рдореЗрд░реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдмрдиреА рд░рд╣реЗрдВрдЧреАред

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

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

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рд░ рдореЛрдбрд╝ рдкрд░ рдПрдХ рдкрд░ undefined рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред

  • рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЪрд░ред let x; alert(x);
  • рдЫреЛрдбрд╝реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХред let foo = (a?) => alert(a); foo();
  • рдЧреИрд░-рдореМрдЬреВрдж рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ред let x = []; alert(x[0]);
  • рдЧреИрд░-рдореМрдЬреВрдж рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ред let x = {}; alert(x['foo']);

рджреВрд╕рд░реА рдУрд░, рдЕрд╢рдХреНрдд, рдХрдо рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

  • рдбреЛрдо рдкрд╣реБрдВрдЪред alert(document.getElementById('nonExistent'));
  • рддреГрддреАрдп-рдкрдХреНрд╖ рд╡реЗрдм рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ ( JSON.stringify рд╕реНрдЯреНрд░рд┐рдкреНрд╕ undefined )ред { name: "Joe", address: null }
  • рд░реЗрдЧреЗрдХреНрд╕ред

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

рдирддреАрдЬрддрди рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ undefined рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рдЪрд▓рд┐рдд рд╣реИред

@NoelAbrahams рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ :)

рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЪрд░

рдореИрдВ рд╣рдореЗрд╢рд╛ рдЪрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ noImplicitAny рдЪрд╛рд▓реВ рд╣реИ, рдЗрд╕рд▓рд┐рдП let x рд╡реИрд╕реЗ рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬрд┐рддрдирд╛ рдХрд░реАрдм рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рд╣реИ let x: any = null , рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░

рдореИрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдЖрдкрдХрд╛ рдХреЛрдб _will_ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛?) рддреЛ рдореЗрд░реЗ рд▓рд┐рдП: function f(name?: string = null, options?: any = {}) ред
рдХрдЪреНрдЪреЗ undefined рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ _exceptional_ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ред

рдЧреИрд░-рдореМрдЬреВрдж рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛

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

рдЧреИрд░-рдореМрдЬреВрдж рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ред

рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдореЗрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рдорд╛рди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ null рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рди рдХрд┐ undefined ред рдлрд┐рд░ рд╕реЗ рдЖрдкрдХреЛ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдЬрд╛рдВрдЪ рдХрд░рдирд╛) рд▓реЗрдХрд┐рди рд╡реЗ _edge case_ рд╣реИрдВ рдФрд░ рдореЗрд░реА рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реИрдВред

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

let cats: Cat[];
// Note that find returns undefined if there's no cat named Kitty
let myFavoriteCat = cats.find(c => c.name === 'Kitty'); 
if (myFavoriteCat === undefined) {
  // Immediately do something to compensate here:
  // return false; or 
  // myFavoriteCat = new Cat('Kitty'); or
  // whatever makes sense.
}
// Continue with assurance that myFavoriteCat is not null (it was an array of non-nullable cats after all).

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

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

рд╣рд╛рдВ, undefined рдХреА рд╡рдЬрд╣ рд╕реЗ рдмрд╛рдд 100% рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднрд╛рд╖рд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ 100% рд╕рд╣реА рд╣реИред JS рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ undefined рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

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

@ jods4 , рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрдврд╝рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЖрдкрддреНрддрд┐ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рдпрдо рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рд╕рд╛рдореНрдпрд╡рд╛рдж рдмрдирд╛рдо рдореБрдХреНрдд рдмрд╛рдЬрд╛рд░ рдХреА рддрд░рд╣ рд╣реИ: рдореБрд╕реНрдХрд╛рди:

TS рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк

@NoelAbrahams " undefined рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЙрддрдирд╛ рд╣реА рдПрдХ рдирд┐рдпрдо рд╣реИ рдЬрд┐рддрдирд╛ " null рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ"ред

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

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ TS рдХреЗ рдкрд╛рд╕ undefined рд╕реЗ рдЕрдзрд┐рдХ null рдХрд╛ рдкрдХреНрд╖ рд▓реЗрдиреЗ рдХрд╛ рдирд┐рдпрдо рд╣реИ, рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ "рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП" рдкрд╕рдВрдж рд╣реИ рдпрд╛ рдпрджрд┐ рдкрд╕рдВрдж рдХреЗ рдкреАрдЫреЗ рдФрд░ рддрд░реНрдХ рд╣реИрдВред

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

  1. рдпрд╣ рд╣рдорд╛рд░реЗ рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрдИ рд╕реНрдерд┐рд░ рдУрдУ рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ рд╕реА # рд╕реЗ рдЖрддреЗ рд╣реИрдВред
  2. рдЧреИрд░-рдЖрд░рдВрднрд┐рдХ рдЪрд░ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдЧрдВрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреА рдордВрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВред
  3. рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреЗрдПрд╕ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ null рддреБрд▓рдирд╛ рдореЗрдВ delete null рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред
  4. рдпрд╣ null рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореВрд▓реНрдп рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдФрд░ undefined , рдЬреЛ рдХрд┐... рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ред undefined рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП undefined рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЦрд╛рд▓реА рдореВрд▓реНрдп рдХреЛ _pass_ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? null рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
  5. рдпрд╣ рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдл рд░рд╛рд╕реНрддрд╛ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ undefined ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рдкрд░ рд╕рдкрдирд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред
  6. рдЖрдкрдХреЛ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, IMHO null рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ undefined ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ undefined рд╕реЗ null рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐
obj.nonexistentProp рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдФрд░ рд╕реНрдерд┐рд░рддрд╛
undefined ред

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

рдордВрдЧрд▓ рд╕рд┐рддрдореНрдмрд░ 8, 2015, рдкрд░ 6:48 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@NoelAbrahams https://github.com/NoelAbrahams "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
"рд╢реВрдиреНрдп рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рдпрдоред

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

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдХреЗ рдкрд╛рд╕ рд╢реВрдиреНрдп рдкрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛ рдкрдХреНрд╖ рд▓реЗрдиреЗ рдХрд╛ рдирд┐рдпрдо рд╣реИ, рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдЕрдЧрд░ рдпрд╣
рдПрдХ рдордирдорд╛рдирд╛ "рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП" рдкрд╕рдВрдж рд╣реИ рдпрд╛ рдпрджрд┐ рдФрд░ рднреА рд╣реИрдВ
рдкрд╕рдВрдж рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХред

рдХреНрдпреЛрдВ _I_ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдмрдЬрд╛рдп рдЕрд╢рдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:

  1. рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрдИ рд╕реНрдерд┐рд░ рдУрдУ рд╕реЗ рдЖрддреЗ рд╣реИрдВ
    рд╕реА # рдЬреИрд╕реА рднрд╛рд╖рд╛рдПрдВред
  2. рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЪрд░ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдб рдЧрдВрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
    рдХрдИ рднрд╛рд╖рд╛рдПрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдкрдирд╛ рдмрдирд╛рдПрдВ
    рдЗрд░рд╛рджрд╛ рд╕рд╛рдлред
  3. рд╣рд╛рд▓рд╛рдВрдХрд┐ JS рдПрдХ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реИ
    рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЗрд╕ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ
    рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╢реВрдиреНрдпред
  4. рдпрд╣ рдЕрд╢рдХреНрдд рдХреЗ рдмреАрдЪ рд╕реНрд╡рдЪреНрдЫ рдЕрдВрддрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди
    рдореВрд▓реНрдп рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЬреЛ рдХрд┐... рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
    рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╡реИрдХрд▓реНрдкрд┐рдХ
    рдкреИрд░рд╛рдореАрдЯрд░ред рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ред рддреБрдо рдХреИрд╕реЗ рд╣реЛ
    _pass_ рдЦрд╛рд▓реА рдорд╛рди рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
    рдЖрдзрд╛рд░? рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
  5. рдпрд╣ рд╢реВрдиреНрдп рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ
    рдзрд╛рдЧрд╛, рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж
    рдореИрдВ рдЗрд╕ рдкрд░ рджрд┐рди-рд╕рдкрдиреЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред
  6. рдЖрдкрдХреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЖрдИрдПрдордПрдЪрдУ рдирд▓ рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ
    рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -138514437
.

@impinball
рдХреНрдпрд╛ рд╣рдо рд╣рд░ рдЬрд┐рдердм рдЪрд░реНрдЪрд╛ рдореЗрдВ "рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ undefined рдпрд╛ null рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЯреАрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ undefined рдХреЛ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ (рдпрд╛ рдирд╣реАрдВ) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╣ рдорд╛рдореВрд▓реА рдирд╣реАрдВ рд╣реИред рддреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдмрд╛рдИрдХрд╢реЗрдбрд┐рдВрдЧ рдХреИрд╕реЗ рд╣реЛ рд░рд╣реА рд╣реИ?

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

  1. рд╣рдо undefined рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ? (рдореЗрд░реА рд░рд╛рдп: рдпрд╣ рдЕрднреА рднреА рд╣рд░ рдЬрдЧрд╣ рд╣реИ рдФрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ)
  2. рд╣рдо рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ? (рдореЗрд░реА рд░рд╛рдп: рдСрдкреНрдЯ-рдЗрди рдлрд╝реНрд▓реИрдЧ, рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ред рдлрд╝реНрд▓реИрдЧ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ "рдмреНрд░реЗрдХрд┐рдВрдЧ" рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╢реВрдиреНрдп рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред)

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

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

рдордВрдЧрд▓ рд╕рд┐рддрдореНрдмрд░ 8, 2015, рдкрд░ 13:28 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@impinball https://github.com/impinball
рдХреНрдпрд╛ рд╣рдо рд╣рд░ рдЬрд┐рдердм рдЪрд░реНрдЪрд╛ рдореЗрдВ "рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрд╣реЗрдВ рдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рд╢реВрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЯреАрдо рд╡рд░реАрдпрддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдореБрджреНрджрд╛
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдпрд╛ рдирд╣реАрдВ) рдФрд░ рдХреИрд╕реЗ
рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИред рддреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ рдХреИрд╕реЗ рд╣реИ
рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░?

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

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -138641395
.

@ jods4 рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рдмрд┐рдВрджреБ 2 рд╕реЗ

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЗрд╕реЗ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

@impinball
рдореБрдЭреЗ undefined рдЦрд┐рд▓рд╛рдл рднреА (рдХреБрдЫ) рд╕реБрд░рдХреНрд╖рд╛ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИред

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

рдХреНрдпрд╛ рд╣рдореЗрдВ null рдФрд░ undefined рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ: T | null , T | undefined , T | null | undefined рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╢реНрди рдХрд╛ рдЖрд╕рд╛рди рдЙрддреНрддрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛: T? рдЕрд░реНрде рд╣реИ? рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рджреЛрдиреЛрдВ? рдХреНрдпрд╛ рд╣рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдЪрд╛рд╣рд┐рдП?

@ рдЕрд░реНрдирд╡рд┐рдпрди
TS рдореЗрдВ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред
рдореЗрд░рд╛ рд▓реЗрдирд╛ рдерд╛:

  1. рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд╢рдХреНрдд рдмрдирд╛рдПрдВ (рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рд╕рд╣рд┐рдд);
  2. рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдВ ( null ) рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
  3. null рд╕реЗ any рддрдХ рдЪреМрдбрд╝рд╛ рдХрд░рдирд╛ рдирд┐рдХрд╛рд▓реЗрдВ;
  4. рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдкреЗрд╢ рдХрд░реЗрдВ T? рдЬреЛ рдХрд┐ T | null ;
  5. рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ null рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдирд┐рдХрд╛рд▓реЗрдВред

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

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЬреАрдердм рдкрд░ рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ рдкрд╣рд▓реЗ рд╕рдВрдЧрддрддрд╛ рд╕реНрд╡рд┐рдЪ рдХреЛ рдХреЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд░рд╣рд╛ рд╣реВрдВ :(
рд╕рдВрдЧрддрддрд╛ рд╕реНрд╡рд┐рдЪ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИ <_<ред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА TS рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирдП рдХреЛрдб рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рдВрднрд╡рддрдГ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реВрдиреНрдп рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ!

рдЕрд╕реНрд╡реАрдХрд░рдг: рдпрд╣ рдпрд╣рд╛рдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд╣реАрдВ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рд╕рдорд╛рдзрд╛рдиред

рдбрд╛рдВрдЧ рдлреЛрди!
*рд╕рдм рд▓реЛрдЧ

*рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╕рд╛рде рд╣реА рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ "рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛" рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП

@ jods4 рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдпрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:

declare const list: T![];

for (const entry of list) {
  // `entry` is clearly immutable here.
}

list.forEach(entry => {
  // `entry` is clearly immutable here.
})

list.map(entry => {
  // `entry` is clearly immutable here.
})

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХрд╛ рдПрдХ рдЯрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░рдгреА рд╕реАрдорд╛ рдореЗрдВ рдЪреЗрдХ рдХреА рдЧрдИ рд╣реИ:

declare const list: T![]

for (let i = 0; i < list.length; i++) {
  // This could potentially fail if the compiler doesn't correctly do the static bounds check.
  const entry: T![] = list[i];
}

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

declare const list: T![]

const end = round(max, list.length);

for (let i = 0; i < end; i++) {
  const entry: T![] = list[i];
}

рдХреБрдЫ рдЖрд╕рд╛рди, рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрдард┐рди рд╣реИрдВред

@impinball рджрд░рдЕрд╕рд▓, рдЖрдзреБрдирд┐рдХ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ map , forEach рдпрд╛ for..of рдареАрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрднреА рдкреНрд░рд╛рд░рдВрдн рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред (рдЙрдирдореЗрдВ рд╡реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ undefined рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╢реВрдиреНрдп-рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреАрдПрд╕ рдЗрд╕реЗ рдордирд╛ рдХрд░реЗрдВрдЧреЗред)

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

let array: T![] = [];  // an empty array of non-null, non-undefined T
// blah blah
array[4] = new T();  // Fine for array[4], but it means array[0..3] are undefined, is that OK?
// blah blah
let i = 2;
// Note that we could have an array bounds guard
if (i < array.length) {
  let t = array[i];  // Inferred type would be T!, but this is actually undefined :(
}

Object.defineProperty рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

let array = new Array(5)
Object.defineProperty(array, "length", 2, {
  get() { return 10 },
})

рдмреБрдз рд╕рд┐рддрдореНрдмрд░ 9, 2015, рдкрд░ 17:49 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@impinball https://github.com/impinball рджрд░рдЕрд╕рд▓, рдЖрдзреБрдирд┐рдХ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рдирдХреНрд╢рд╛,
forEach рдпрд╛ for..of рдареАрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдереЗ
рдкреНрд░рд╛рд░рдВрдн рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ред (рдЙрдирдореЗрдВ рд╡реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╢реВрдиреНрдп-рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреАрдПрд╕ рдЗрд╕реЗ рдордирд╛ рдХрд░реЗрдВрдЧреЗред)

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЪрд▓реЛ рд╕рд░рдгреА: рдЯреА! [] = []; // рдЧреИрд░-рд╢реВрдиреНрдп, рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЯреА // рдмреНрд▓рд╛ рдмреНрд▓рд╛рд╣ рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА
рд╕рд░рдгреА [4] = рдирдпрд╛ рдЯреА (); // рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ [4], рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд░рдгреА [0..3] рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ?// рдмреНрд▓рд╛ рдмреНрд▓рд╛рд╣рд▓реЗрдЯ i = 2;// рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рд╕реАрдорд╛ рдЧрд╛рд░реНрдбрд┐рдл (i <array. рд▓рдВрдмрд╛рдИ) {
рдЪрд▓реЛ рдЯреА = рд╕рд░рдгреА [i]; // рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдЯреА рд╣реЛрдЧрд╛!, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ :(
}

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -139055786
.

рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ:

  1. рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВред
  2. рд╢реВрдиреНрдп рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХреЗрдВред
  3. рдирд▓ рдФрд░/рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╢реВрдиреНрдпрддрд╛ рд╣рдордиреЗ рдирд┐рд╣рд┐рдд рдХреА рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рд╣рд╕рд┐рдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдФрд░ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ
рд╡рд┐рд╕реНрддрд╛рд░ред
10 рд╕рд┐рддрдВрдмрд░ 2015 рдХреЛ рд╕реБрдмрд╣ 9:13 рдмрдЬреЗ, "рдЗрд╕рд┐рдпрд╛ рдореАрдбреЛрдЬ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

Object.defineProperty рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

let array = new Array(5)
Object.defineProperty(array, "length", 2, {
get() { return 10 },
})

рдмреБрдз рд╕рд┐рддрдореНрдмрд░ 9, 2015, рдкрд░ 17:49 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@impinball https://github.com/impinball рджрд░рдЕрд╕рд▓, рдЖрдзреБрдирд┐рдХ API рдЬреИрд╕реЗ
рдирдХреНрд╢рд╛,
forEach рдпрд╛ for..of рдареАрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдереЗ
рдкреНрд░рд╛рд░рдВрдн рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ред (рдЙрдирдореЗрдВ рд╡реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╢реВрдиреНрдп-рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреАрдПрд╕ рдЗрд╕реЗ рдордирд╛ рдХрд░реЗрдВрдЧреЗред)

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЪрд▓реЛ рд╕рд░рдгреА: рдЯреА! [] = []; // рдЧреИрд░-рд╢реВрдиреНрдп, рдЧреИрд░-рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЯреА рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА //
рдмреНрд▓рд╛ рдмреНрд▓рд╛рд╣
рд╕рд░рдгреА [4] = рдирдпрд╛ рдЯреА (); // рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ [4], рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд░рдгреА [0..3] рд╣реИрдВ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ?// blah blahlet i = 2;// рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕рд░рдгреА рд╕реАрдорд╛ рдЧрд╛рд░реНрдбрд┐рдл (i < array.length) {
рдЪрд▓реЛ рдЯреА = рд╕рд░рдгреА [i]; // рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдЯреА рд╣реЛрдЧрд╛!, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд :(
}

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment-139055786>
.

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -139230568
.

@impinball
рдореБрдЭреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ defineProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ TS рд╕реБрд░рдХреНрд╖рд╛ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдФрд░ рдЧрддрд┐рд╢реАрд▓ JS рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрджрдо рд░рдЦрдирд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрднреА рднреА рд╕реАрдзреЗ TS рдХреЛрдб рдореЗрдВ defineProperty рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рд╣реИред

@ рдЕрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡

рднрд╛рд╖рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

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

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

рдЗрд╕реЗ "рдареАрдХ" рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ ES6 рдореЗрдВ рд╣реИ, рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ,
рдФрд░ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рд╕реЗрд▓реНрдл рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореВрд▓ рдРрд░реЗ рдкрд░ рд╕реЗрдЯ рд╣реИ
рдирд┐рд░реНрдорд╛рддрд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

Array = (function (A) {
  "use strict";
  function check(target, prop) {
    const i = +prop;
    if (prop != i) return target[prop];
    if (i >= target.length) {
      throw new ReferenceError();
    }
    return i;
  }

  function Array(...args) {
    return new Proxy(new Array(...args), {
      get(target, prop) {
        return target[check(target, prop)];
      },
      set(target, prop, value) {
        return target[check(target, prop)] = value;
      },
    });
  }

  Array.prototype = A.prototype;
  Array.prototype.constructor = Array
  Object.setPrototypeOf(Array, A);
  return Array;
})(Array);

(рдиреЛрдЯ: рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлреЛрди рдкрд░ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ...)

рдЧреБрд░реБ, 10 Sep, 2015, рдкрд░ 10:09 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@impinball https://github.com/impinball
рдореБрдЭреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдлрд╛рдЗрдирдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
TS рд╕реБрд░рдХреНрд╖рд╛ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдФрд░ рдЧрддрд┐рд╢реАрд▓ JS рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрджрдо рд░рдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рди рдХрд░реЗрдВ
рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрднреА рднреА рдЯреАрдПрд╕ рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рдбрд┐рдлрд╛рдЗрдирдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рд╣реИред

@ рдПрд▓реЗрдХреНрд╕реА-рдмрд╛рдпрдХреЛрд╡ https://github.com/aleksey-bykov

рднрд╛рд╖рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -139245706
.

@impinball рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ "рдареАрдХ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ ...
рд╡реЗ рдЬреЗрдПрд╕ рдФрд░ рдЯреАрдПрд╕ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

//not-sparse
var array = [arrlength] => index*3;
var array = <number[]>[3];
//sparse
var array = [];

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

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛... рдпрд╣ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рд╣рдо рд╡рд┐рд░рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ T|undefined рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ ... рдФрд░ рдЕрдиреНрдп 'рд╕реБрд░рдХреНрд╖рд┐рдд' рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рдЯреА рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛)

рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ let arr: (T|undefined)[] ред
рддреЛ рдореИрдВ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реВрдВ: arr[0] = undefined ред
рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЙрди "рд╕реБрд░рдХреНрд╖рд┐рдд" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _will_ рдкрд╣рд▓реЗ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП undefined рд▓реМрдЯрд╛рдПрдВред рддреЛ arr.forEach(x => ...) рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ x: T ред рдЗрд╕реЗ рдЕрднреА рднреА x: T|undefined ред

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░-рдбрд┐рдлреЙрд▓реНрдЯ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдЧрд╛ред

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

TS рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ JS рдореЗрдВ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдРрд╕реЗ рдХрдИ рдХрд╛рд░реНрдп / рдирд┐рд░реНрдорд╛рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдорд╛рдиреНрдп TS рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд┐рд░ TS рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЫреЗрдж рдерд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдо рдирд╣реАрдВ рд╣реИ: let x: number[] = []; x[3] = 0; рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рд░рдгреА let x: number?[] рдШреЛрд╖рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

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

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

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк
T рдФрд░ T|null рдмреАрдЪ рдЕрдВрддрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

9:11 AM рдкрд░, рд╢реБрдХреНрд░ рд╕рд┐рддрдореНрдмрд░ 11, 2015 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ https://github.com/Griffork
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛... рдпрд╣ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдЧрд┐рд░рдлреНрддрд╛рд░:
(рдЯреА | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) []ред
рддреЛ рдореИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реВрдБ: рдЧрд┐рд░рдлреНрддрд╛рд░ [0] = рдЕрдкрд░рд┐рднрд╛рд╖рд┐рддред
рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЙрди "рд╕реБрд░рдХреНрд╖рд┐рдд" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _will_ рд╡рд╛рдкрд╕реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд
рдкрд╣рд▓реЗ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдПред рддреЛ arr.forEach(x => ...) рдореЗрдВ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ x: T.
рдпрд╣ рдЕрднреА рднреА рдПрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЯреА | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рддред

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░-рдбрд┐рдлреЙрд▓реНрдЯ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдЧрд╛
рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдЖрддреНрдорд╛ рдореЗрдВ рдмрд╣реБрдд TS рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рд╡рд╣ TS рджрд░реНрд╢рди рдпрд╣ рд╣реИ рдХрд┐ JS рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рд╣реИ
рдФрд░ рд╡реЗ codegen рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВ
рдЖрдВрд╢рд┐рдХ рдкреНрд░рдХрд╛рд░-рд╢реБрджреНрдзрддрд╛ рдЬреЛ рдореБрдЭреЗ рдХрд╛рдлреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

TS рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ JS рдореЗрдВ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╣реИрдВ
рдХрдИ рдХрд╛рд░реНрдп / рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡реИрдз рдЯреАрдПрд╕ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣реИ
рдЖрдкрдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рднрд╛рд╡ рдФрд░ рд╕реНрдерд┐рд░ TS
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЫреЗрдж рдерд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдХреЛрдб
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдо рдирд╣реАрдВ рд╣реИ: рдЪрд▓реЛ x: рд╕рдВрдЦреНрдпрд╛ [] = []; рдПрдХреНрд╕ [3] = 0; рдФрд░ рдЕрдЧрд░ рд╡рд╣ рд╣реИ
рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рд░рдгреА рдШреЛрд╖рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП
рдПрдХреНрд╕: рд╕рдВрдЦреНрдпрд╛? []ред

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -139408240
.

@ jods4 "рдлрд┐рдХреНрд╕рд┐рдВрдЧ" рд╕реЗ

@jods рдореИрдВ рдЬреЗрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЯреАрдПрд╕ рдирд╣реАрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯрдХрд░ рд╣реИред

рдЧреБрд░реБ, рд╕рд┐рддрдореНрдмрд░ 10, 2015, 19:19 рдХреЛ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

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

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк
T рдФрд░ T|null рдмреАрдЪ рдЕрдВрддрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

9:11 AM рдкрд░, рд╢реБрдХреНрд░ рд╕рд┐рддрдореНрдмрд░ 11, 2015 jods [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ https://github.com/Griffork
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛... рдпрд╣ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдЧрд┐рд░рдлреНрддрд╛рд░:
(рдЯреА | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) []ред
рддреЛ рдореИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реВрдБ: рдЧрд┐рд░рдлреНрддрд╛рд░ [0] = рдЕрдкрд░рд┐рднрд╛рд╖рд┐рддред
рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЙрди "рд╕реБрд░рдХреНрд╖рд┐рдд" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _will_ рд╡рд╛рдкрд╕реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд
рдкрд╣рд▓реЗ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдПред рддреЛ arr.forEach(x => ...) рдореЗрдВ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ x: T.
рдпрд╣ рдЕрднреА рднреА рдПрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЯреА | рдЕрдкрд░рд┐рднрд╛рд╖рд┐рддред

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░-рдбрд┐рдлреЙрд▓реНрдЯ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдЧрд╛
рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдЖрддреНрдорд╛ рдореЗрдВ рдмрд╣реБрдд TS рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рдЯреАрдПрд╕ рджрд░реНрд╢рди рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рд╣реИрдВ
рдЬреЗ рдПрд╕
рдФрд░ рд╡реЗ codegen рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВ
рдЖрдВрд╢рд┐рдХ рдкреНрд░рдХрд╛рд░-рд╢реБрджреНрдзрддрд╛ рдЬреЛ рдореБрдЭреЗ рдХрд╛рдлреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

TS рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ JS рдореЗрдВ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╣реИрдВ
рдХрдИ рдХрд╛рд░реНрдп / рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡реИрдз рдЯреАрдПрд╕ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
рдкрд╛рд╕ рд╣реЛрдирд╛
рдЖрдкрдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рднрд╛рд╡ рдФрд░ рд╕реНрдерд┐рд░ TS
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЫреЗрдж рдерд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдХреЛрдб
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдо рдирд╣реАрдВ рд╣реИ: рдЪрд▓реЛ x: рд╕рдВрдЦреНрдпрд╛ [] = []; рдПрдХреНрд╕ [3] = 0; рдФрд░ рдЕрдЧрд░ рд╡рд╣ рд╣реИ
рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рд░рдгреА рдШреЛрд╖рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП
рд╣реЛрдиреЗ рджреЗрдирд╛
рдПрдХреНрд╕: рд╕рдВрдЦреНрдпрд╛? []ред

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/Microsoft/TypeScript/issues/185#issuecomment-139408240>
.

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -139409349
.

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

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдорд┐рд▓рд╛рди рд╕реА/рд╕реА ++ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рддрд╣ рдкрд░ рдмрд╣реБрдд рдмреЗрд╡рдХреВрдл рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХреБрдЫ рджреЗрдЦрдирд╛ рджреБрд░реНрд▓рдн рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪ рдмрдирд╛рдХрд░ _better_ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ 99.99% рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдмреЗрд╣рдж рддреАрдЦреА рдХреЛрдб рдЧрдВрдз рд╣реИрдВ, рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЙрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд▓рдЧрднрдЧ рдХреЛрдИ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред

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

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрднрд░рддрд╛ рд╣реБрдЖ рд╕рдВрдХрд▓реНрдк рд╣реИ?

рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рдХреА рдХрдореА, рдпрд╣ рдЕрднреА рднреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдПрдХ рдЪрд░ рдкрд░ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХрд┐ _assuredly_ null рд╣реИред

var o = null;
console.log(o.x);

... рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рд╕реАрдорд╛-рдЬрд╛рдВрдЪ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ:

  1. рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордг (рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреА рд╕рд░рдгреА рддрддреНрд╡ рдкрд╣реБрдВрдЪ) рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░рдгреА рдкрд░ рднреА рдПрдХ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, [] "рд╡рд┐рдзрд┐" рдореЗрдВ T? рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдмрд╛рдЙрдВрдб-рдЪреЗрдХ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ T? рдХреЛ T! рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдРрд░реЗ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рд╕рд░рдгреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ (рдЙрд╕реА рд╢реВрдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде) рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рд░рдгреА рдПрдХреНрд╕реЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд╛-рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдЙрдЯ-рдСрдл-рдмрд╛рдЙрдВрдб рдПрдХреНрд╕реЗрд╕ undefined рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ рдЯрд╛рдЗрдк-рдЪреЗрдХрд░ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред
  3. рдкрд░рдорд╛рдгреБ рд╡рд┐рдХрд▓реНрдк: рд╕рднреА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЕрд╢рдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рднрд╛рд╖рд╛ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЯрд╛рдЗрдкрдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпреЗ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЧреБрдгреЛрдВ рдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкрд╣реБрдВрдЪ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП object['property'] рдЬрд╣рд╛рдВ object рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ { [ key: string ]: T! } ред

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

рдПрдХ рджреВрд╕рд░рд╛ рдкреНрд░рд╢реНрди рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХреНрд╢рд╛) рдкрд░ get рд╡рд┐рдзрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдиреЗ рдХреБрдЫ рдореВрд▓реНрдп рд▓рд┐рдпрд╛ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рдпрд╛, _рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЗрд╡рд▓ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ_:

class Container<K,V> {
  get(key: K): V? {
    // fetch from some internal data structure and return the value, if it exists
    // return null otherwise
  }
}

// only non-nullable values allowed in the container
const container = new Container<SomeKeyClass!, SomeValueClass!>();
const val: SomeValueClass!;
// ... later, we attempt to read from the container with a get() call
// even though only non-nullables are allowed in the container, the following should fail:
// get() explicitly returns null when the item can't be found
val = container.get(someKey);

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

class Container<K, V> {
  insert(key: K!, val: V): void {
    // put the val in the data structure
    // the key must not be null here, even if K is elsewhere a nullable type
  }
}

const container = new Container<SomeKeyClass?, SomeValueClass>();
container.insert(null, new SomeValueClass()); // fails

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

рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╣рд╛рдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ --noImplicitAny рд╕рдорд╛рди рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ 2.0 рд░рд┐рд▓реАрдЬ рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдХреЛрдИ рдмрдЪрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИрдЪ (рдХрдо рд╕реЗ рдХрдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ) рддрдм рддрдХ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ (рдЖрджрд┐рдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ):

// Option 1
function sum(numbers: !number[]) {
  let res = 0
  for (let i = 0; i < numbers.length; i++) {
    res += <!number> numbers[i]
  }
  return res
}

// Option 2
function sum(numbers: !number[]) {
  let res = 0
  for (let i = 0; i < numbers.length; i++) {
    res += numbers[i]
  }
  return res
}

// Option 3
function sum(numbers: number[]) {
  let res = 0
  for (let i = 0; i < numbers.length; i++) {
    res += <!number> numbers[i]
  }
  return res
}

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг: map рдлрд╝рдВрдХреНрд╢рдиред

// Option 1
function map<T>(list: !T[], f: (value: !T, index: !number) => !T): !T[] {
  let res: !T[] = []
  for (let i = 0; i < list.length; i++) {
    res.push(f(<!T> list[i], i));
  }
  return res
}

// Option 2
function map<T>(list: !T[], f: (value: !T, index: !number) => !T): !T[] {
  let res: !T[] = []
  for (let i = 0; i < list.length; i++) {
    res.push(f(list[i], i));
  }
  return res
}

// Option 3
function map<T>(list: T[], f: (value: !T, index: !number) => !T): T[] {
  let res: T[] = []
  for (let i = 0; i < list.length; i++) {
    const entry = list[i]
    if (entry !== undefined) {
      res.push(f(<!T> entry, i));
    }
  }
  return res
}

рдПрдХ рдЕрдиреНрдп рдкреНрд░рд╢реНрди: рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ entry рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ? !string , ?string , рдпрд╛ string ?

declare const regularStrings: string[];
declare const nullableStrings: ?string[];
declare const nonnullableStrings: !string[];

for (const entry of regularStrings) { /* ... */  }
for (const entry of nullableStrings) { /* ... */  }
for (const entry of nonnullableStrings) { /* ... */  }

рд╡рд┐рдХрд▓реНрдк рддреАрди рдПрдХ рдЬреБрдмрд╛рди-рдЗрди-рдЧрд╛рд▓ рд╕реБрдЭрд╛рд╡ рдерд╛ :stuck_out_tongue:

рдкреБрди: рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдкреНрд░рд╢реНрди:

declare const regularStrings: string[];
declare const nullableStrings: string?[];
declare const nonNullableStrings: string![]; // fails typecheck in option three

for(const entry of regularStrings) {
  // option 1: entry is of type string?
  // option 2: depends on default nullability
}

for(const entry of nullableStrings) {
  // option 1 and 2: entry is of type string?
}

for(const entry of nonNullableStrings) {
  // option 1: entry is of type string?
  // option 2: entry is of type string!
}

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдиреЗ рдХрд╣реАрдВ рдФрд░ рдЧрд╛рд░рдВрдЯреА рджреА рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдирд╣реАрдВ рд╣реИ рд╕рд░рдгреА рдореЗрдВ (рдЗрд╕ рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ as string! рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрдм рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ get рдлрд╝рдВрдХреНрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдХреБрдВрдЬреА рдХреЗ рдиреАрдЪреЗ рдореМрдЬреВрдж рд╣реИ, рдпрд╛ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ рддреЛ рд╢реВрдиреНрдп рд╣реИ), рдФрд░ рдпрджрд┐ Map.prototype.get рдПрдХ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИ рддреЛ object['property'] рд╢рд╛рдпрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣реА, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд╢рдХреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╛рди рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬреЛ рдЕрдЬреАрдм рд▓реЛрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгреА рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд╛рдкрд╕ рд░реЗрдВрдЧ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

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

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

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


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдореБрдЦрд░ рдХрд░рдиреЗ рдХреЗ рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднрд┐рдХрдерди рдЕрдХреНрд╕рд░ рд╣реЛрддреЗ рд╣реИрдВ
рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ
V8 рдХреЛрдб рдЖрдзрд╛рд░ рдПрдХ UNREACHABLE(); рдореИрдХреНрд░реЛ рд╣реИ рдЬреЛ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ a . рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдереЛрдбрд╝рд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдирд╛ рдпрджрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реА++
рдЯрд╛рдЗрдк рдЬрд╛рдБрдЪ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдЕрднрд┐рдХрдерди рдХреЗ рд▓рд┐рдП static_assert ред

рдордВрдЧрд▓рд╡рд╛рд░, 20 рдЕрдХреНрдЯреВрдмрд░, 2015 рдХреЛ рд╕реБрдмрд╣ 4:01 рдмрдЬреЗ, рдореИрдЯ рдмреЗрдХрд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╡рд┐рдХрд▓реНрдк рддреАрди рдПрдХ рдЬреБрдмрд╛рди-рдЗрди-рдЧрд╛рд▓ рд╕реБрдЭрд╛рд╡ рдерд╛ [рдЫрд╡рд┐:
:рдЕрдЯрдХ_рдмрд╛рд╣рд░_рдЬреАрдн:]

рдкреБрди: рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдкреНрд░рд╢реНрди:

рдХреЙрдиреНрд╕ рд░реЗрдЧреБрд▓рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ []; рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЕрд╢рдХреНрдд рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ? []; рдХреЙрдиреНрд╕реНрдЯ рдиреЙрди-рдиреНрдпреВрд▓реЗрдмрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ! []; // рд╡рд┐рдХрд▓реНрдк рддреАрди рдореЗрдВ рдЯрд╛рдЗрдкрдЪреЗрдХ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
рдХреЗ рд▓рд┐рдП (рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐) {
// рд╡рд┐рдХрд▓реНрдк 1: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╣реИ?
// рд╡рд┐рдХрд▓реНрдк 2: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрд╢рдХреНрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
}
for(nullableStrings рдХреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐) {
// рд╡рд┐рдХрд▓реНрдк 1 рдФрд░ 2: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╣реИ?
}
for(nonNullableStrings рдХреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐) {
// рд╡рд┐рдХрд▓реНрдк 1: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╣реИ?
// рд╡рд┐рдХрд▓реНрдк 2: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ!
}

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╣реИрдВ
рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдиреЗ рдХрд╣реАрдВ рдФрд░ рдЧрд╛рд░рдВрдЯреА рджреА рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
рд╕рд░рдгреА рдореЗрдВ рдорд╛рди (рдЗрд╕ рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!)
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдЖрдкрдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рдВрднрд╛рд╡рд┐рдд-рдЦрддрд░рдирд╛рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрдм рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реИ
рдХрд╛рд░реНрдп: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рдВрдХреНрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ
(рдпрджрд┐ рдпрд╣ рдХреБрдВрдЬреА рдХреЗ рдиреАрдЪреЗ рдореМрдЬреВрдж рд╣реИ, рдпрд╛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ),
рдФрд░ рдЕрдЧрд░ Map.prototype.get рдПрдХ рдЕрд╢рдХреНрдд рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рддреЛ object['property']
рд╢рд╛рдпрдж рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕реА рддрд░рд╣ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ
рд╢реВрдиреНрдпрддрд╛ рдФрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рд╡рд┐рд╖рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
рдЬрд╣рд╛рдВ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрднрд┐рдЧрдо рд╣реИ
рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдХрд▓реНрдк рджреЛ http://flowtype.org/docs/nullable-types.html , рдФрд░ рдЕрдВрддрд┐рдо I
рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд╕рд╛рдЙрдВрдбрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╡рд┐рд░рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреА рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╡реИрдз рдмрдирд╛ рджрд┐рдпрд╛
https://github.com/rwaldron/tc39-notes/blob/master/es6/2015-01/JSExperimentalDirections.pdf
(рдареАрдХ рд╣реИ, рдордЬрдмреВрдд рдореЛрдб/"рд╕реЗрдирд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдЙрдиреНрд╣реЗрдВ рдЕрд╡реИрдз рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдЙрдВрдбрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╣реИ
рдирдП рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕реБрдкрд░рд╕реЗрдЯ), рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИ
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд▓рдВрдмрд╛рдИ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ
рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рдеред

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -149468527
.

рдЗрд╕рд┐рдпрд╛ рдореАрдбреЛрдЬ

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ non-void рдкреНрд░рдХрд╛рд░ рдХрд╣рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ non-void рдХреЛ T! рдпрд╛ !T рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЧрд▓рддреА рд╣реИред рдПрдХ рдЗрдВрд╕рд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

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

``` .ts
// рдлрд╝рдВрдХреНрд╢рди рдЦреБрд╢реА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (x: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ;
}

рд▓реЗрди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"); // 5
рд▓реЗрди (рд╢реВрдиреНрдп); // рддреНрд░реБрдЯрд┐, рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ

``` .ts
function len(x: string): number {
    if (x === null) {
        return -1;
    }
    return x.length;
}

len("works"); // 5
len(null); // null

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ non-void рд░реВрдк рдореЗрдВ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ void рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ред рдЗрд╕реА рддрд░рд╣, рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ non-void рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ null рдпрд╛ undefined

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

``` .ts
рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (рдПрдХреНрд╕:? рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ; // рддреНрд░реБрдЯрд┐: рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреЛрдИ рд▓рдВрдмрд╛рдИ рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ? рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
}

One more example -- what about using function results?

``` .js
function len(x: string): number {
    return x.length;
}

function identity(f: string): string {
    return f;
}

function unknown(): string {
    if (Math.random() > 0.5) {
        return null;
    }
    return "maybe";
}

len("works"); // 5
len(null); // error, no property length of null

identity("works"); // "works": string
identity(null); // null: void
unknown(); // ?string

len(identity("works")); // 5
len(identity(null)); // error, no property length of null
len(unknown()); // error: no length property on type ?string, you must use a type guard

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

рдпрд╣рд╛рдВ рдПрдХрдорд╛рддреНрд░ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ function(t: T) рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рд╢реВрдиреНрдп/ void рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдмрд┐рдирд╛ рд╢реВрдиреНрдп рдорд╛рди рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдпрд╣ рдЕрдм рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  1. ?T рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдирд╛рдирд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡реИрдк рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
  2. рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЧ --noImplicitVoid рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдХрдВрдкрд╛рдЗрд▓ рдХреЛрдб рдлрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реА рдорд╛рдиреЗрдЧрд╛ред рдпрд╣ "рдмреНрд░реЗрдХрд┐рдВрдЧ" рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рдбрд╝рдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреБрд╕реНрддрдХрд╛рд▓рдп ?T рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдЕрдкрдирд╛рдПрдВрдЧреЗ, рдЬрдм рдкреНрд░рдХрд╛рд░ void рдФрд░ T рдЬрдм рдпрд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдСрдкреНрдЯ-рдЗрди рднреА рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрдирддреЗ рд╣реИрдВ рд╡реЗ рд╣реА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП ?T рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдИ рд╡рд╕реНрддреБ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреА рд╣реИред

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

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

рдордВрдЧрд▓рд╡рд╛рд░, 17 рдирд╡рдВрдмрд░, 2015, 13:37 рдХреЛ рдЯреЙрдо рдЬреИрдХреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╣рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
рдЯреА рдХреЗ рд╕рд╛рде рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛! рдпрд╛ !T рдПрдХ рдЧрд▓рддреА рд╣реИред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
рдПрдХ рдЗрдВрд╕рд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдореБрд╢реНрдХрд┐рд▓
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ред

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

// рдлрд╝рдВрдХреНрд╢рди рдЦреБрд╢реА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрди (x: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ;
}

рд▓реЗрди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"); // 5
рд▓реЗрди (рд╢реВрдиреНрдп); // рддреНрд░реБрдЯрд┐, рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ

рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (x: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рдЕрдЧрд░ (рдПрдХреНрд╕ === рд╢реВрдиреНрдп) {
рд╡рд╛рдкрд╕реА -1;
}
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ;
}

рд▓реЗрди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"); // 5
рд▓реЗрди (рд╢реВрдиреНрдп); // рд╢реВрдиреНрдп

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

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

рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (рдПрдХреНрд╕:? рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ; // рддреНрд░реБрдЯрд┐: рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреЛрдИ рд▓рдВрдмрд╛рдИ рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ? рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
}

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг - рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (x: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ;
}
рдлрд╝рдВрдХреНрд╢рди рдкрд╣рдЪрд╛рди (рдПрдл: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕реНрдЯреНрд░рд┐рдВрдЧ {
рд╡рд╛рдкрд╕реА рдЪ;
}
рдлрд╝рдВрдХреНрд╢рди рдЕрдЬреНрдЮрд╛рдд (): рд╕реНрдЯреНрд░рд┐рдВрдЧ {
рдЕрдЧрд░ (рдЧрдгрд┐рддред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ()> 0.5) {
рд╡рд╛рдкрд╕реА рд╢реВрдиреНрдп;
}
рд╡рд╛рдкрд╕реА "рд╢рд╛рдпрдж";
}

рд▓реЗрди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"); // 5
рд▓реЗрди (рд╢реВрдиреНрдп); // рддреНрд░реБрдЯрд┐, рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ

рдкрд╣рдЪрд╛рди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"); // "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ": рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдкрд╣рдЪрд╛рди (рд╢реВрдиреНрдп); // рдЕрдорд╛рдиреНрдп рд╢реВрдиреНрдп
рдЕрдирдЬрд╛рди(); // ?рдбреЛрд░реА

рд▓реЗрди (рдкрд╣рдЪрд╛рди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ")); // 5
рд▓реЗрди (рдкрд╣рдЪрд╛рди (рд╢реВрдиреНрдп)); // рддреНрд░реБрдЯрд┐, рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ
рд▓реЗрди (рдЕрдЬреНрдЮрд╛рдд ()); // рддреНрд░реБрдЯрд┐: рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреЛрдИ рд▓рдВрдмрд╛рдИ рдХреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ? рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

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

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

рдпрд╣ рдЕрдм рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

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

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -157463734
.

рдЕрдЪреНрдЫреА рдмрд╛рддред рдореМрдЬреВрджрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдмрд╣реБрдд рд╕реА рд╕рдорд╛рдирддрд╛рдПрдБ рд╣реИрдВ:

``` .ts
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ {
рдУ ?: рд╕реНрдЯреНрд░рд┐рдВрдЧ
}
VoidableProperty рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ {
рдУ:?рд╕реНрдЯреНрд░рд┐рдВрдЧ
}

рд╡реИрдХрд▓реНрдкрд┐рдХрдкрд░рдо рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди (рдУ ?: рд╕реНрдЯреНрд░рд┐рдВрдЧ) { }
VoidableParam рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди (рдУ:? рд╕реНрдЯреНрд░рд┐рдВрдЧ) { }
```

рджрд░рдЕрд╕рд▓, рд╡реЗ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рд╡реЗ рд╕реНрдкрд╖реНрдЯ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП ? рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП ! рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрд╢рдХреНрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрддрд╛ рд╣реИред

рд╢реВрдиреНрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдо рдЕрд╢рдХреНрдд рднреЗрдж рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред :+1:

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдШреВрдо рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╕рднреА рдиреЗ рдКрдкрд░ рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдПрдХ рд╢реВрдиреНрдпрдХрд░рдгреАрдп/рдЧреИрд░-рд╢реВрдиреНрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ?

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдореИрдВрдиреЗ рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝реА рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рд╣рдж рддрдХ рджреВрд╕рд░реЛрдВ рдХреА рдХрд╣реА рдЧрдИ рдмрд╛рддреЛрдВ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди/рд╕рдВрдпреЛрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдорд╛рд░реНрдЧ рд╣реИред рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ null рдФрд░ undefined рд╣рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдФрд░ рд╕рдВрдХрд▓рдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ T рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░:

``` .ts
рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди (x: рд╕реНрдЯреНрд░рд┐рдВрдЧ): рд╕рдВрдЦреНрдпрд╛ {
рд╡рд╛рдкрд╕реА x.рд▓рдВрдмрд╛рдИ;
}

рд▓реЗрди ("рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ");
// рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ - 5

рд▓реЗрди (рд╢реВрдиреНрдп);
// рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
// рддреНрд░реБрдЯрд┐: рд╢реВрдиреНрдп рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ 'рд▓рдВрдмрд╛рдИ' рдирд╣реАрдВ рд╣реИ

рд▓реЗрди (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд);
// рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
// рддреНрд░реБрдЯрд┐: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ 'рд▓рдВрдмрд╛рдИ' рдирд╣реАрдВ рд╣реИ
```

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

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

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

рднрд╛рдЧ рдПрдХ:

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

рднрд╛рдЧ рджреЛ:

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

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

@tejacques рдореИрдВ, рдПрдХ рдХреЗ рд▓рд┐рдП, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реВрдВред

@tejacques - FWIW, рдореИрдВ рдЖрдкрдХреЗ рдЖрдХрд▓рди рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдЖрдЗрдП рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЯреАрдПрд╕ рдЯреАрдо рд╕рд╣рдордд рд╣реЛ :)

рджрд░рдЕрд╕рд▓, рджреЛ рдЪреАрдЬреЗрдВ:

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

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

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

interface Foo {
  w: string;
  x?: string;
  y: ?string;
  z?: ?string;
}

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

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

рд╕рд╛рде рд╣реА, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ x рд╢реВрдиреНрдп-рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рдЕрд░реНрде рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд┐рд░ рд╕реЗ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ --noImplicitVoid рдзреНрд╡рдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

y рдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╢реВрдиреНрдп рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _must_ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рд╢реВрдиреНрдп рд╣реЛред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реВрдиреНрдп-рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдереЛрдбрд╝рд╛ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдореЗрдВ _not_ рдХреЛ рдЗрд╕реЗ undefined рд╕реЗрдЯ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реА рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЗрд╕реЗ x рд╕реЗ рдЕрд▓рдЧ рдХреНрдпрд╛ рдмрдирд╛ рджреЗрдЧрд╛?

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

x рдФрд░ y рдмреАрдЪ рдХреБрдЫ рдУрд╡рд░рд▓реИрдк рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ x рдЕрдВрддрддрдГ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЕрдзрд┐рдХрддрдо рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП z рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реБрдП .

@tejacques

рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА ?T рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджреНрдпрдкрд┐ рд╣рд░ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд░ рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЯреАрдХ рдирд╣реАрдВ)ред

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

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

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг: рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА list рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди unsafe(x) рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ null рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рдХ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ: list.filter(unsafe) ред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рддрдХ рдЖрдк рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рдХрд┐ list рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреНрдпрд╛ рд╣реЛрдЧреА, рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреНрдп рдорд╛рдорд▓реЗ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред

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

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

@tejacques my bad, рдореИрдВрдиреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ (рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдиреЗ void===null рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ :( рдореИрдВ рд╕рд┐рд░реНрдл рдЬрд╛рдЧрдиреЗ рдХреЛ рджреЛрд╖ рджреЗрддрд╛ рд╣реВрдВ)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЖрдкрдХреА рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рдкрд╕рдВрдж рд╣реИред

рдореИрдВ рдЖрдк рддреАрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдПрдХ рдкреЛрд╕реНрдЯ рдкрд░ рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдкрдардиреАрдп рдмреВрдБрдж рд╣реИред

@ рдЧреНрд░рд┐рдлреЛрд░реНрдХ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХрднреА-рдХрднреА рдкрд╛рда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдерд╛ред

@dallonf рдЖрдкрдХрд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ x?: T рдФрд░ y: ?T рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЯреВрд▓рдЯрд┐рдкреНрд╕/рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдЧрд╛рд░реНрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЯреВрд▓рдЯрд┐рдкреНрд╕/рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ:
a?: T рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд▓реА рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдпрджрд┐ рдШреЛрд╖рдгрд╛ рдореЗрдВ ?: рдирд╣реАрдВ рд╣реИ рддреЛ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реЗ рдЦрд╛рд▓реА рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

w: T рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЧреИрд░- void рддрд░реНрдХ рд╣реИ ( --noImplicitVoid )
рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

x?: T рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T | undefined
if (typeof x !== 'undefined') рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
undefined рдкрд░ рд╕рдЯреАрдХ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдкрд▓ рдЧреНрд▓рд┐рдлрд╝ !== рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

y: ?T рдПрдХ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T | void
if (y == null) рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдбрдмрд▓ рдЧреНрд▓рд┐рдлрд╝ == рдзреНрдпрд╛рди рджреЗрдВ рдЬреЛ null рдФрд░ undefined рдпрд╛рдиреА void рджреЛрдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ

z?: ?T рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T | undefined | void рдЬреЛ T | void
if (z == null) рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлрд┐рд░ рд╕реЗ рдбрдмрд▓ рдЧреНрд▓рд┐рдлрд╝ == рдзреНрдпрд╛рди рджреЗрдВ рдЬреЛ null рдФрд░ undefined рдпрд╛рдиреА void рджреЛрдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ

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

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрджреНрдпрддрди рд╢рдмреНрджрд╛рдВрдХрди рдФрд░ рдХреБрдЫ рдЯрд╛рдЗрдкреЛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред

@ jods4 рдореИрдВ рдЖрдкрдХреА рдХрд╣реА рд╣рд░ рдмрд╛рдд рд╕реЗ рдХрд╛рдлреА рд╣рдж рддрдХ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдЧреИрд░- void рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдЪрд░рдг рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ TS рдЯреАрдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рд╣рдо рдмреЗрд╣рддрд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЕрдзрд┐рдХ рдЬрд╛рдБрдЪ рдФрд░ ?T рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕рдбрд╝рдХ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдорд┐рд╢рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Arrays рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдк рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

``` .ts
рдлрд╝рдВрдХреНрд╢рди numToString (x: рд╕рдВрдЦреНрдпрд╛) {
рд╡рд╛рдкрд╕реА x.toString ();
}
рд╡рд░ рдЕрдВрдХ: рд╕рдВрдЦреНрдпрд╛ [] = рд╕рд░рдгреА (100);
numToString (рдЕрдВрдХ [0]); // рддреБрдордиреЗ рдмрд╣реБрдд рдмрдбрд╝реА рдЧрд▓рддреА рдХрд░ рджреА рд╣реИ!

You can try to do something specifically for uninitialized arrays, like typing the `Array` function as `Array<?T>` / `?T[]` and upgrading it to `T[]` after a for-loop initializing it, but I agree that you can't catch everything. That said, that's already a problem anyway, and arrays typically don't even send uninitialized values to `map`/`filter`/`forEach`.

Here's an example -- the output is the same on Node/Chrome/IE/FF/Safari.

``` .ts
function timesTwo(x: number) {
    return x * 2;
}
function all(x) {
    return true;
}
var nums: number[] = Array(100);
nums.map(timesTwo);
// [undefined x 100]
nums.filter(all);
// []
nums.forEach(function(x) { console.log(x); })
// No output

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

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

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ --noImplicitVoid рдмрдВрдж рд╣реИ

``` .ts
рдЗрдВрдЯрд░рдлрд╝реЗрд╕{
(рдПрдХреНрд╕: рдЯреА): рдпреВ;
}

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IHaveName {
рдирд╛рдо: рд╕реНрдЯреНрд░рд┐рдВрдЧ;
}

рдлрдВрдХреНрд╢рди рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо(рдПрдХреНрд╕: рдЯреА, рдПрдлрдПрди: рдЖрдИрдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо) {
рд╡рд╛рдкрд╕реА рдПрдлрдПрди (рдПрдХреНрд╕);
}

рд╡рд░ рдирд╛рдо = {
рдирд╛рдо: "рдлреВ"
};

рд╡рд░ рдЧрд▓рддрдирд╛рдо = {
рдирд╛рдо: 1234
};

рд╡рд░ рдирд╛рдо рдирд▓ = {
рдирд╛рдо: рд╢реВрдиреНрдп
};

var someFun = (x: IHaveName) => x.name;
var someFunHandlesVoid = (x: IHaveName) => {
рдЕрдЧрд░ (x != null && x.name != null) {
рд╡рд╛рдкрд╕реА x.рдирд╛рдо;
}
рд╡рд╛рдкрд╕реА "рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ";
};

All of the above code compiles just fine -- no issues. Now let's try using it

``` .ts
someFun(named);
// "Foo"
someFun(wrongName);
// error TS2345: Argument of type '{ name: number; }' is not assignable to parameter
// of type 'IHaveName'.
//   Types of property 'name' are incompatible.
//     Type 'number' is not assignable to type 'string'.
someFun(null);
// Not currently an error, but would be something like this:
// error TS#: Argument of type 'null' is not assignale to parameter of type 'IHaveName'.
someFun(namedNull);
// Not currently an error, but would be something like this:
// error TS#: Argument of type '{ name: null; }' is not assignable to parameter of
// type 'IHaveName'.
//   Types of property 'name' are incompatible.
//     Type 'null' is not assignable to type 'string'.

someFunHandlesVoid(named);
// "Foo"
someFunHandlesVoid(wrongName);
// error TS2345: Argument of type '{ name: number; }' is not assignable to parameter
// of type 'IHaveName'.
someFunHandlesVoid(null);
// "No Name"
someFunHandlesVoid(namedNull);
// "No Name"

transform(named, someFun);
// "Foo"
transform(wrongName, someFun);
// error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage.
// Consider specifying the type arguments explicitly.
//   Type argument candidate '{ name: number; }' is not a valid type argument because it
//   is not a supertype of candidate 'IHaveName'.
//     Types of property 'name' are incompatible.
//       Type 'string' is not assignable to type 'number'.
transform(null, someFun);
// Not currently an error, but would be something like this:
// error TS#: The type argument for type parameter 'T' cannot be inferred from the usage.
// Consider specifying the type arguments explicitly.
//   Type argument candidate 'null' is not a valid type argument because it
//   is not a supertype of candidate 'IHaveName'.
transform(namedNull, someFun);
// Not currently an error, but would be something like this:
// error TS#: The type argument for type parameter 'T' cannot be inferred from the usage.
// Consider specifying the type arguments explicitly.
//   Type argument candidate '{ name: null; }' is not a valid type argument because it
//   is not a supertype of candidate 'IHaveName'.
//     Types of property 'name' are incompatible.
//       Type 'string' is not assignable to type 'null'.

transform(named, someFunHandlesVoid);
// "Foo"
transform(wrongName, someFunHandlesVoid);
// error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage.
// Consider specifying the type arguments explicitly.
//   Type argument candidate '{ name: number; }' is not a valid type argument because it
//   is not a supertype of candidate 'IHaveName'.
transform(null, someFunHandlesVoid);
// "No Name"
transform(namedNull, someFunHandlesVoid);
// "No Name"

рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдкрдХрдбрд╝ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрддрд┐рдо рдиреЛрдЯ -- --noImplicitVoid рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░ рдЙрдкрд░реЛрдХреНрдд рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЕрдм someFun рдФрд░ someFunHandlesVoid рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ someFun рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рднрд▓реЗ рд╣реА someFunHandlesVoid рд╢реВрдиреНрдп рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ null рдпрд╛ undefined рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧреИрд░ void рд▓реЗрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (x: ?IHaveName) : string рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ null рдпрд╛ undefined ред рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

рдпрд╣ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдХреИрд░реЗрдХреНрдЯрд░ ? рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЭрдВрдбрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ --warnImplicitVoid рдЬреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд╕рдХреЗрдВред

рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдЭрдЯрдХрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ:

  • рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛/рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ рд░рд╣реЗрдВ?
  • рдЗрд╕реЗ рддреАрди рдирдП рдлреАрдЪрд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдВ?

    • рдЙрдиреНрдирдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг

    • рд╣реЛ рд╕рдХрддрд╛ рд╣реИ/рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ ?T

    • --noImplicitVoid рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк

  • рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкрд┐рдВрдЧ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп?

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

@tejacques

  • рдЖрдк dallonf рдХреЗ рдЯреНрд░рд┐рдкрд▓ рдмрд░рд╛рдмрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ typeof рдЦреЛ рд░рд╣реЗ рд╣реИрдВред
  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк jods4 рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ ? рдЦреЛ рд░рд╣реЗ рд╣реИрдВред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдореМрдЬреВрдж рд╣реИред

рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдмрд╣реБрдд рд╣реА рдирд┐рд░рд░реНрдердХ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирддреА рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдЧрд╕реНрдд рдореЗрдВ рдКрдкрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛) рддреЛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╢реЛрд░ рдХреЗ рдмреАрдЪ рдкрд╛рдПрдВрдЧреЗред

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

рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП +1, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, --noImplicitVoid рд╡рд┐рдХрд▓реНрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

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

рдмреБрдзрд╡рд╛рд░ рдХреЛ, рдирд╡рдВрдмрд░ 18, 2015, 21:24 рдЯреЙрдо рдЬреИрдХреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдЭрдЯрдХрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ
рдкрджред

рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
рдХреНрдпрд╛ рд╣рдореЗрдВ:

  • рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛/рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ рд░рд╣реЗрдВ?
  • рдЗрд╕реЗ рддреАрди рдирдП рдлреАрдЪрд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдВ?

    • рдЙрдиреНрдирдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг

    • рд╣реЛ рд╕рдХрддрд╛ рд╣реИ/рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░? рдЯреА

    • --noImplicitVoid рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк

  • рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкрд┐рдВрдЧ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп?

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/185#issuecomment -157928828
.

+1 --noImplicitNull рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП (рд╢реВрдиреНрдп рдФрд░ рд╢реВрдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ)ред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ Op<A> = A | NullType рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред

+1 рдХреЗ рд▓рд┐рдП _--noImplicitNull_ рд╕рд╛рде рд╣реА рдХреГрдкрдпрд╛: +1:

+1 рдХреЗ рд▓рд┐рдП --noImplicitNull

рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

@Gaelan рджрд┐рдП рдЧрдП #7140 рдХреЛ рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк --noImplicitNull рд▓рд┐рдП рдПрдХ рдирдпрд╛, рд╕рдорд░реНрдкрд┐рдд рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдм рдРрд╕рд╛ рдХрд░рдирд╛ рд╢рд╛рдпрдж рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

@isiahmeadows рд╢рд╛рдпрдж рдЗрд╕реЗ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/Microsoft/TypeScript/issues/2388 рдЗрд╕ рдХрд╛рдо рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреВрд░реНрдг рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

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

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

@mhegazy рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдкрд╣рд▓реЗ --noImplicitNull рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ?Type рдпрд╛ !Type ред рдЖрдИрдПрдордПрдЪрдУ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рдПрдХ рдФрд░ рдЭрдВрдбрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЖрдИрдЖрд░рд╕реА рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реЛ рдЪреБрдХрд╛ рдерд╛ рдЬрдм рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдереЗред

рдЕрдм рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ #7140 рдФрд░ #8010 рджреЛрдиреЛрдВ рдХрд╛ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

@massimiliano-mantione, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ https://github.com/Microsoft/TypeScript/issues/8405

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