Typescript: рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рд░рдгреА рд╕рдВрдШ + рдореИрдк рдХреА рдЧрдИ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдордИ 2019  ┬╖  1рдЯрд┐рдкреНрдкрдгреА  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 3.4.0-dev.201xxxxx


рдЦреЛрдЬ рд╢рдмреНрдж:

рдореИрдк рдХрд┐рдП рдЧрдП рдкреНрд░рдореБрдЦ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрджреЗрд╢ рдЦреЛ рдЧрдП

рдХреЛрдб

type Initial = [1, 2, 3, 4]

type FindReplace<T extends any[], Find, Replace> = {
  [K in keyof T]: T[K] extends Find ? Replace : T[K]
}

// Map over array and replace '2'
type ResultArray = FindReplace<Initial, 2, 'was 2'>
// => [1, "was 2", 3, 4]

// Now accessing the array values using [number], the type
// order is lost. This matters because now when the union is later
// cast as a intersection, the types are in the wrong order
type Result = ResultArray[number]
// => 1 | 3 | 4 | "was 2

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░:

рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдорд╛рдирдЪрд┐рддреНрд░рдг рдкреНрд░рдореБрдЦ рдЖрджреЗрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:

рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдореИрдкрд┐рдВрдЧ "рдкреНрд░рдХрд╛рд░" рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди T[keyof T] рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╕рдордп рдХреБрдВрдЬреА рдХреНрд░рдо рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ

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

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

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

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

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

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

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

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

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

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

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

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

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

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