Typescript: ES6 μ„ μ–Έ 파일 (lib.es6.d.ts)의 λ°°μ—΄ 상속

에 λ§Œλ“  2016λ…„ 09μ›” 13일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: microsoft/TypeScript

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λŠ” λͺ¨λ‘ 여기에 ν‘œμ‹œλœ λ°°μ—΄ 상속 κΈ°λŠ₯을 이미 κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

lib.d.ts Suggestion help wanted

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

정적 ν•¨μˆ˜λŠ” Array 클래슀λ₯Ό λ§Œλ“€λ©΄ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” Array 도 ν•¨μˆ˜λ‘œ 호좜 ν•  수 μžˆμœΌλ―€λ‘œ 호좜 κ°€λŠ₯ν•œ μƒμ„±μžλ₯Ό μ„€λͺ…ν•˜λŠ” 방법 (https://github.com/Microsoft/TypeScript/issues/183)이 ν•„μš”ν•˜λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ•ˆνƒ€κΉκ²Œλ„μ΄ μ œμ•ˆμ€ TC39μ—μ„œ μ€‘λ‹¨λ˜μ—ˆμ§€λ§Œ μ•°λΉ„μ–ΈνŠΈ 선언에 λŒ€ν•œ 버전을 μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이것을 λ³„λ„λ‘œ μΆ”μ ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•œλ‹€.

μΆ”κ°€, λ‚˜λ¨Έμ§€ this λŒ€μ‹  T[] κ°€λŠ₯ν•΄μ•Όν•œλ‹€. λ‚˜λŠ” sort 이미 μ΄κ²ƒμ„ν•˜κ³  μžˆλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

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 이미 μ΄κ²ƒμ„ν•˜κ³  μžˆλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰