Существует ли typescript Список <> и/или Карта <> класс/библиотека?
Добавили ли они класс runtime List < > и/или Map < > type в typepad 1.0? А если нет, есть ли там сплошная библиотека, которую кто-то написал, которая предоставляет эту функциональность?
И в случае List < > существует ли связанный список, в котором элементы в списке имеют свойство next/prev? Нам нужен список, где из элемента элемента (т.е. Не из итератора) мы можем получить следующий и предыдущие элементы в списке (или null, если он первый/последний).
Ответы
Ответ 1
Они добавили класс List List < > и/или Map < > type в typepad 1.0
Нет, обеспечение времени выполнения не является фокусом команды TypeScript.
есть ли сплошная библиотека, которую кто-то написал, которая предоставляет эту функциональность?
Я написал (на самом деле просто портирован на ведра до typescript): https://github.com/basarat/typescript-collections
Ответ 2
Очень легко написать это сами, и таким образом у вас есть больше контроля над вещами.
Как говорят другие ответы, TypeScript не нацелен на добавление типов или функциональных возможностей времени выполнения.
Карта
class Map<T> {
private items: { [key: string]: T };
constructor() {
this.items = {};
}
add(key: string, value: T): void {
this.items[key] = value;
}
has(key: string): boolean {
return key in this.items;
}
get(key: string): T {
return this.items[key];
}
}
Список:
class List<T> {
private items: Array<T>;
constructor() {
this.items = [];
}
size(): number {
return this.items.length;
}
add(value: T): void {
this.items.push(value);
}
get(index: number): T {
return this.items[index];
}
}
Я не тестировал (или даже пытался скомпилировать) этот код, но он должен дать вам отправную точку.. вы можете, конечно, потом изменить то, что захотите, и добавить функциональность, которая вам нужна...
Что касается ваших "особых потребностей" из списка, я не вижу причин для внедрения связанного списка, так как массив javascript позволяет добавлять и удалять элементы.
Здесь приведена модифицированная версия списка для обработки get prev/next из самого элемента:
class ListItem<T> {
private list: List<T>;
private index: number;
public value: T;
constructor(list: List<T>, value: T, index: number) {
this.list = list;
this.index = index;
this.value = value;
}
prev(): ListItem<T> {
return this.list.get(this.index - 1);
}
next(): ListItem<T> {
return this.list.get(this.index + 1);
}
}
class List<T> {
private items: Array<ListItem<T>>;
constructor() {
this.items = [];
}
size(): number {
return this.items.length;
}
add(value: T): void {
this.items.push(new ListItem<T>(this, value, this.size()));
}
get(index: number): ListItem<T> {
return this.items[index];
}
}
Здесь также вы просматриваете непроверенный код.
Надеюсь, что это поможет.
Изменить - поскольку этот ответ по-прежнему получает некоторое внимание
Javascript имеет собственный объект карты, поэтому нет необходимости создавать свои собственные:
let map = new Map();
map.set("key1", "value1");
console.log(map.get("key1")); // value1