Typescript: Pewarisan array dalam file deklarasi ES6 (lib.es6.d.ts)

Dibuat pada 13 Sep 2016  ·  3Komentar  ·  Sumber: microsoft/TypeScript

ES6 mendukung pewarisan Array, tetapi ini tidak tercermin dalam file deklarasi TypeScript (lib.es6.d.ts).

Fungsi array seperti 'filter' dan 'slice' mengembalikan array subclass, jadi berikut ini harus dikompilasi dalam TypeScript:

class MyArray extends Array {
    get size() { return this.length; }
}

var x = new MyArray(10).slice();
x.size;

Fungsi 'reverse', 'concat', 'slice', 'splice', 'filter' harus dikembalikan dengan tipe 'this'.
Fungsi 'map' mengembalikan sebuah instance dari subtipe juga, tetapi saya tidak tahu bagaimana hal itu dapat direpresentasikan dalam TypeScript, karena akan membutuhkan parameter generik dalam tipe kembalian, seperti:
map<U>(callback: (value: T, index: number, array: this) => U): this<U>

Masalah lainnya adalah konstruktor statis kelas Array, ini juga harus dikompilasi:

var x = MyArray.of(1,2,3);
var y = MyArray.from([1,2,3]);
x.size;
y.size;

Ada juga beberapa detail tambahan yang ditambahkan oleh Simbol @

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

Chrome dan Node.js sudah mengimplementasikan fitur pewarisan array yang ditampilkan di sini.

lib.d.ts Suggestion help wanted

Komentar yang paling membantu

fungsi statis dapat diselesaikan dengan membuat Array kelas. Masalahnya adalah kita perlu memiliki cara untuk mendeskripsikan konstruktor yang dapat dipanggil (https://github.com/Microsoft/TypeScript/issues/183), karena Array juga dapat disebut sebagai fungsi. sayangnya proposal ini terhenti di TC39, tetapi kami dapat melakukan versinya untuk deklarasi ambient. Saya pikir ini harus dilacak secara terpisah.

selebihnya, menambahkan this sebagai ganti T[] seharusnya dapat dilakukan. Saya yakin sort sudah melakukan ini.

Semua 3 komentar

Ini akan menjadi sulit, karena TypeScript saat ini tidak mengizinkan penempatan ulang generik pada polimorf this . Lihat # 6223 (di mana masalah ini dapat dianggap sebagai penipuan).

Masalahnya menjadi jika dalam subclass Anda memperkenalkan slot generik yang berbeda, bagaimana cara kerja polimorfik this ? Misalnya Anda membuat subclass yang hanya berurusan dengan array array, di mana T generik digunakan dengan cara ini T[][] . Tetapi slot umum di Array this adalah T[] , bagaimana Anda mengungkapkannya dengan cara yang selalu berhasil?

Ada lebih banyak contoh dalam masalah yang disebutkan di atas serta di mana polimorfik ini rusak bila dikombinasikan dengan obat generik.

Masalah dengan 'peta' memang sama dengan yang dibahas dalam "Polimorfik 'ini' dan Generik", tetapi semua metode Array bermasalah lainnya dapat bekerja dengan benar hanya dengan mengembalikan 'ini'.

Dan metode Array.from dan Array.of menghasilkan masalah terpisah, yang juga tidak mungkin direpresentasikan dengan sintaks TypeScript saat ini sejauh yang saya tahu, karena antarmuka ArrayConstructor harus dapat merujuk ke 'ini' dari Array antarmuka.

fungsi statis dapat diselesaikan dengan membuat Array kelas. Masalahnya adalah kita perlu memiliki cara untuk mendeskripsikan konstruktor yang dapat dipanggil (https://github.com/Microsoft/TypeScript/issues/183), karena Array juga dapat disebut sebagai fungsi. sayangnya proposal ini terhenti di TC39, tetapi kami dapat melakukan versinya untuk deklarasi ambient. Saya pikir ini harus dilacak secara terpisah.

selebihnya, menambahkan this sebagai ganti T[] seharusnya dapat dilakukan. Saya yakin sort sudah melakukan ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

weswigham picture weswigham  ·  3Komentar

seanzer picture seanzer  ·  3Komentar

wmaurer picture wmaurer  ·  3Komentar

dlaberge picture dlaberge  ·  3Komentar

kyasbal-1994 picture kyasbal-1994  ·  3Komentar