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 λ ννμ λν 곡μ©μ²΄κ° μ¬κΈ° μμ λ Όμ λ λ μ΄κ²μ μΈκΈνμ΅λλ€.
첫째, λ Έμ‘° μ§μλ μ°λ¦¬κ° κ΄μ°° ν μ μλλ‘ νμ© ν μμλ κ²μ΄ μλλλ€. λ΄λΆμ μΌλ‘ ν΅ν©μ μ λ ¬ λ μ ν λͺ©λ‘μΌλ‘ μ μ₯λλ©° (μ΄λ μ΄λ€ κ°μ κ΄κ³λ₯Ό μ μνκ² κ²°μ νλ μ μΌν ν¨μ¨μ μΈ λ°©λ²), μ λ ¬ ν€λ μ μ§μ μΌλ‘ μμ±λλ λ΄λΆ IDμ λλ€. μ΄κ²μ μ€μ§μ μΈ κ²°κ³Όλ λ§€μ° μ μ¬ν λ νλ‘κ·Έλ¨μ΄ λ§€μ° λ€λ₯Έ κ²°ν© μμλ₯Ό μμ± ν μ μμΌλ©°, μΈμ΄ μλΉμ€ 컨ν μ€νΈμμ κ΄μ°°λλ λμΌν κ²°ν©μ λͺ λ Ή μ€ μ»¨ν μ€νΈμμ κ΄μ°° λ λμ λ€λ₯Έ μμλ₯Ό κ°μ§ μ μλ€λ κ²μ λλ€. μ νμ΄ μμ±λλ μμλ λ€μκ³Ό κ°μ΅λλ€. λ¨μν νμΈλλ μμμ λλ€.
κ°μ₯ μ μ©ν λκΈ
μ°ν© λͺ λ Ήμ λΉμ μ΄ λ¬΄μμ λ―Ώμ΄μΌ ν κ²μ΄ μλλλ€. @RyanCavanaugh λ ννμ λν 곡μ©μ²΄κ° μ¬κΈ° μμ λ Όμ λ λ μ΄κ²μ μΈκΈνμ΅λλ€.