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

Dav*_*len 38 collections typescript

他们是否在typepad 1.0中添加了运行时List <>和/或Map <>类型类?如果没有,是否有人在其中编写提供此功能的可靠库?

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

Nit*_*mer 52

自己编写它很容易,这样你就可以更好地控制事物.正如其他答案所说,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];
    }
}
Run Code Online (Sandbox Code Playgroud)

列表:

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有测试(甚至尝试编译)这段代码,但它应该给你一个起点..当然你可以改变你想要的东西并添加你需要的功能......

至于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];
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里你也看到未经测试的代码..

希望这可以帮助.


编辑 - 因为这个答案仍然得到一些关注

Javascript有一个本机Map对象,所以不需要创建自己的对象:

let map = new Map();
map.set("key1", "value1");
console.log(map.get("key1")); // value1
Run Code Online (Sandbox Code Playgroud)


bas*_*rat 23

他们是否为typepad 1.0添加了运行时List <>和/或Map <>类型类

不,提供运行时不是TypeScript团队的重点.

是否有一个可靠的库,有人写了提供此功能?

我写的(真的只是把桶移到了打字稿上):https://github.com/basarat/typescript-collections