他们是否添加了运行时列表<>和/或Map<>键入类到typepad 1.0?如果没有,是否有人在其中编写提供此功能的实体库?
在List<>的情况下,是否有链接列表,其中列表中的元素具有next / prev属性?我们需要一个列表,从元素对象(即不是迭代器),我们可以得到列表中的下一个和前一个元素(如果它是第一个/最后一个,则为null)。
答案 0 :(得分:45)
自己写这个很容易,这样你就可以对事物有更多的控制权。 正如其他答案所说,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];
}
}
我没有测试过(或者甚至尝试编译)这段代码,但是它应该给你一个起点..你当然可以改变你想要的东西并添加你需要的功能......
至于List中的“特殊需求”,我认为没有理由实现链表,因为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
答案 1 :(得分:22)
他们是否添加了运行时列表&lt;&gt;和/或Map&lt;&gt;键入类到typepad 1.0
不,提供运行时不是TypeScript团队的重点。
是否有人在其中编写提供此功能的实体库?
我写了(真的只是把桶移到了打字稿上):https://github.com/basarat/typescript-collections
JavaScript / TypeScript现在可以原生支持此功能,如果需要,您可以使用lib.d.ts
:https://basarat.gitbooks.io/typescript/docs/types/lib.d.ts.html以及polyfill启用它们