Typescript: НаслСдованиС массивов Π² Ρ„Π°ΠΉΠ»Π΅ объявлСний ES6 (lib.es6.d.ts)

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 13 сСнт. 2016  Β·  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 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для измСнСния сигнатуры Ρ‚ΠΈΠΏΠ° подкласса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ this Π² качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния для Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ filter ΠΈ slice. Π˜Ρ‚Π°ΠΊ, для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° подкласс Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π² настоящСС врСмя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² Ρ„Π°ΠΉΠ»Π΅ объявлСния:

class MyArray2 extends Array {
    static get [Symbol.species]() { return Array; }
}

И Chrome, ΠΈ Node.js ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ наслСдования массивов, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ здСсь.

lib.d.ts Suggestion help wanted

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

статичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ создания класса Array . ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ способ описания Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ конструктора (https://github.com/Microsoft/TypeScript/issues/183), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Array Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. К соТалСнию, это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡ‚ΠΎΠΏΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² TC39, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ для Π²Π½Π΅ΡˆΠ½ΠΈΡ… объявлСний. Π― Π΄ΡƒΠΌΠ°ΡŽ, это Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ this вмСсто T[] Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ sort ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ это.

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ слоТно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ TypeScript Π² настоящСС врСмя Π½Π΅ позволяСт ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ this . Π‘ΠΌ. β„– 6223 (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ этот вопрос ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ°Π½ΠΎΠΌ).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π² подклассС Π²Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ слот, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ this ? НапримСр, Π²Ρ‹ создаСтС подкласс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с массивами массивов, Π³Π΄Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ T использовался Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ T[][] . Но ΠΎΠ±Ρ‰ΠΈΠΉ слот Π² Array this Π±ΡƒΠ΄Π΅Ρ‚ T[] , ΠΊΠ°ΠΊ Π²Ρ‹ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅ это Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ?

Π’ упомянутой Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ломаСтся Π² сочСтании с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с 'map' Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, обсуТдаСмая Π² "ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΌ 'this' ΠΈ Generics", Π½ΠΎ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Array ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, просто возвращая 'this'.

И ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Array.from ΠΈ Array.of ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ синтаксиса TypeScript, насколько ΠΌΠ½Π΅ извСстно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ интСрфСйс ArrayConstructor Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° 'this' массива интСрфСйс.

статичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ создания класса Array . ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ способ описания Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ конструктора (https://github.com/Microsoft/TypeScript/issues/183), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Array Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. К соТалСнию, это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡ‚ΠΎΠΏΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² TC39, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ для Π²Π½Π΅ΡˆΠ½ΠΈΡ… объявлСний. Π― Π΄ΡƒΠΌΠ°ΡŽ, это Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ this вмСсто T[] Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ sort ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ это.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ