是否有打字稿列表<>和/或Map<>类/库?

时间:2014-04-15 23:20:31

标签: collections typescript

他们是否添加了运行时列表<>和/或Map<>键入类到typepad 1.0?如果没有,是否有人在其中编写提供此功能的实体库?

在List<>的情况下,是否有链接列表,其中列表中的元素具有next / prev属性?我们需要一个列表,从元素对象(即不是迭代器),我们可以得到列表中的下一个和前一个元素(如果它是第一个/最后一个,则为null)。

2 个答案:

答案 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.tshttps://basarat.gitbooks.io/typescript/docs/types/lib.d.ts.html以及polyfill启用它们