ES6λ λ°°μ΄ μμμ μ§μνμ§λ§ TypeScript μ μΈ νμΌ (lib.es6.d.ts)μλ λ°μλμ§ μμ΅λλ€.
'filter'λ° 'slice'μ κ°μ λ°°μ΄ ν¨μλ νμ ν΄λμ€μ λ°°μ΄μ λ°ννλ―λ‘ λ€μμ TypeScriptμμ μ»΄νμΌν΄μΌν©λλ€.
class MyArray extends Array {
get size() { return this.length; }
}
var x = new MyArray(10).slice();
x.size;
'reverse', 'concat', 'slice', 'splice', 'filter'ν¨μλ 'this'μ νμΌλ‘ λ°νλμ΄μΌν©λλ€.
'map'ν¨μλ νμ μ νμ μΈμ€ν΄μ€λ λ°ννμ§λ§ λ°ν μ νμ μΌλ° λ§€κ° λ³μκ° νμνκΈ° λλ¬Έμ TypeScriptμμ μ΄λ»κ² νν λ μ μλμ§ λͺ¨λ₯΄κ² μ΅λλ€.
map<U>(callback: (value: T, index: number, array: this) => U): this<U>
λ λ€λ₯Έ λ¬Έμ λ Array ν΄λμ€μ μ μ μμ±μμ λλ€.μ΄ μμ μ»΄νμΌλμ΄μΌν©λλ€.
var x = MyArray.of(1,2,3);
var y = MyArray.from([1,2,3]);
x.size;
y.size;
@ @species Symbolμ μν΄ μΆκ° λ λͺ κ°μ§ μΆκ° ν©λ³μ¦μ΄ μλλ°, μ΄λ 'filter'λ° 'slice'μ κ°μ ν¨μμ λ°ν κ°μΌλ‘ 'this'λ₯Ό μ¬μ©νμ§ μλλ‘ νμ ν΄λμ€μ μ ν μλͺ μ λ³κ²½νλ λ° μ¬μ©ν μ μμ΅λλ€. λ°λΌμ λ€μ μμ μ κ²½μ° νμ ν΄λμ€λ νμ¬ μ μΈ νμΌμμ λ°ν μ νμ΄ μ μλλ λ°©μμ μλν©λλ€.
class MyArray2 extends Array {
static get [Symbol.species]() { return Array; }
}
Chromeκ³Ό Node.jsλ λͺ¨λ μ¬κΈ°μ νμλ λ°°μ΄ μμ κΈ°λ₯μ μ΄λ―Έ ꡬννκ³ μμ΅λλ€.
TypeScriptλ νμ¬ λ€νμ± this
μμ μ λ€λ¦μ μ¬ μ¬λ‘―μ νμ©νμ§ μκΈ° λλ¬Έμ μ΄λ €μΈ κ²μ
λλ€. # 6223 (μ΄ λ¬Έμ λ μμμλ‘ κ°μ£Ό λ μ μμ)μ μ°Έμ‘°νμμμ€.
λ¬Έμ λ νμ ν΄λμ€μμ λ€λ₯Έ μΌλ° μ¬λ‘―μ λμ
νλ©΄ λ€νμ± this
μ΄λ»κ² μλν©λκΉ? μλ₯Ό λ€μ΄ λ°°μ΄μ λ°°μ΄ λ§ μ²λ¦¬νλ νμ ν΄λμ€λ₯Ό λ§λλλ€. μ¬κΈ°μ μΌλ° T
λ μ΄λ¬ν λ°©μμΌλ‘ T[][]
. κ·Έλ¬λ Array
μ this
μ μΌλ°μ μΈ μ¬λ‘―μ Array
T[]
μ
λλ€. νμ μλνλ λ°©μμΌλ‘ μ΄λ»κ² ννν©λκΉ?
μμμ μΈκΈ ν λ¬Έμ μλ μ λ€λ¦κ³Ό κ²°ν© ν λ λ€νμ±μ΄ λΆν΄λλ μκ° λ λ§μ΄ μμ΅λλ€.
'map'μ λ¬Έμ λ μ€μ λ‘ "Polymorphic 'this'λ° Generics"μμ λ Όμ λ κ²κ³Ό λμΌνμ§λ§ λ€λ₯Έ λͺ¨λ λ¬Έμ κ°μλ Array λ©μλλ λ¨μν 'this'λ₯Ό λ°ννμ¬ μ¬λ°λ₯΄κ² μλ ν μ μμ΅λλ€.
κ·Έλ¦¬κ³ Array.from λ° Array.of λ©μλλ λ³λμ λ¬Έμ λ₯Ό μμ±ν©λλ€. ArrayConstructor μΈν°νμ΄μ€λ Arrayμ 'this'λ₯Ό μ°Έμ‘° ν μ μμ΄μΌνκΈ° λλ¬Έμ νμ¬ TypeScript ꡬ문μΌλ‘ νννλ κ²λ λΆκ°λ₯ν©λλ€. μνΈ μμ©.
μ μ ν¨μλ Array
ν΄λμ€λ₯Ό λ§λ€λ©΄ ν΄κ²°ν μ μμ΅λλ€. λ¬Έμ λ Array
λ ν¨μλ‘ νΈμΆ ν μ μμΌλ―λ‘ νΈμΆ κ°λ₯ν μμ±μλ₯Ό μ€λͺ
νλ λ°©λ² (https://github.com/Microsoft/TypeScript/issues/183)μ΄ νμνλ€λ κ²μ
λλ€. μνκΉκ²λμ΄ μ μμ TC39μμ μ€λ¨λμμ§λ§ μ°λΉμΈνΈ μ μΈμ λν λ²μ μ μν ν μ μμ΅λλ€. λλ μ΄κ²μ λ³λλ‘ μΆμ ν΄μΌνλ€κ³ μκ°νλ€.
μΆκ°, λλ¨Έμ§ this
λμ T[]
κ°λ₯ν΄μΌνλ€. λλ sort
μ΄λ―Έ μ΄κ²μνκ³ μλ€κ³ λ―Ώμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ μ ν¨μλ
Array
ν΄λμ€λ₯Ό λ§λ€λ©΄ ν΄κ²°ν μ μμ΅λλ€. λ¬Έμ λArray
λ ν¨μλ‘ νΈμΆ ν μ μμΌλ―λ‘ νΈμΆ κ°λ₯ν μμ±μλ₯Ό μ€λͺ νλ λ°©λ² (https://github.com/Microsoft/TypeScript/issues/183)μ΄ νμνλ€λ κ²μ λλ€. μνκΉκ²λμ΄ μ μμ TC39μμ μ€λ¨λμμ§λ§ μ°λΉμΈνΈ μ μΈμ λν λ²μ μ μν ν μ μμ΅λλ€. λλ μ΄κ²μ λ³λλ‘ μΆμ ν΄μΌνλ€κ³ μκ°νλ€.μΆκ°, λλ¨Έμ§
this
λμT[]
κ°λ₯ν΄μΌνλ€. λλsort
μ΄λ―Έ μ΄κ²μνκ³ μλ€κ³ λ―Ώμ΅λλ€.