你自己写很容易,这样你就可以更好地控制事情了..
正如其他答案所说,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 数组允许您添加和删除项目。
这是 List 的修改版本,用于处理来自元素本身的 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 有一个原生的Map object,所以不需要自己创建:
let map = new Map();
map.set("key1", "value1");
console.log(map.get("key1")); // value1