рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 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 рдиреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдереА: