是否有打字稿 List<> 和/或 Map<> 类/库? [已关闭]

问题描述 投票:0回答:2

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

对于 List<> 来说,是否存在一个链表,其中列表中的元素具有 next/prev 属性?我们需要一个列表,从元素对象(即不是从迭代器)中,我们可以获取列表中的下一个和上一个元素(如果是第一个/最后一个元素,则为 null)。

collections typescript
2个回答
72
投票

自己写起来很容易,这样你就可以更好地控制事情。 正如其他答案所说,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 数组允许您添加和删除项目。
这是列表的修改版本,用于处理从元素本身获取上一个/下一个:

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 对象,因此无需创建自己的:

let map = new Map();
map.set("key1", "value1");
console.log(map.get("key1")); // value1

27
投票

他们是否向打字板 1.0 添加了运行时 List<> 和/或 Map<> 类型类

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

有人编写了一个可靠的库来提供此功能吗?

我写道(实际上只是通过存储桶移植到打字稿):https://github.com/basarat/typescript-collections

更新

JavaScript / TypeScript 现在原生支持此功能,您可以使用

lib.d.ts
来启用它们: https://basarat.gitbook.io/typescript/type-system/lib.d.ts 如果需要的话还可以使用 polyfill 🌹

© www.soinside.com 2019 - 2024. All rights reserved.