在Typescript中,有什么方法可以将类写为Array,所以我可以做class [i],就像C#中的List <t>

时间:2018-08-09 03:42:50

标签: javascript typescript overloading operator-keyword

我是从C#开始的新游戏开发人员。

现在我需要将我的游戏之一转移到打字稿上。

我尝试自定义C#中我非常熟悉的打字稿中的列表。 我的代码如下:

df=df.apply(pd.to_numeric,errors ='ignore')# convert

df['newkey']=df[0].eq('None').cumsum()# using cumsum create the key 
df.loc[df[0].ne('None'),:].groupby('newkey').agg(lambda x : x.sum() if x.dtype=='int64' else x.head(1))# then we agg
Out[742]: 
        0  1  2  3  4  5  6  7
newkey                        
0       a  1  1  1  0  0  0  i
1       e  0  1  0  0  1  0  m
2       h  0  0  0  0  1  0  p

还是,我想做一个数组,这样我可以做类似的事情:

export class List {

private items: Array;
constructor() {
    this.items = [];
}

get count(): number {
    return this.items.length;
}

add(value: T): void {
    this.items.push(value);
}

get(index: number): T {
    return this.items[index];
}
contains(item: T): boolean{
    if(this.items.indexOf(item) != -1){
        return true;
    }else{
        return false;
    }
}
clear(){
    this.items = [];
}
}

我想这有点像运算符重载,但我不太确定。
谁能告诉我怎么做?
预先感谢。

2 个答案:

答案 0 :(得分:2)

仅扩展数组

export class List<T> extends Array<T> {

    constructor() {
        super();
    }

    get count(): number {
        return this.length;
    }

    add(value: T): void {
        this.push(value);
    }

    get(index: number): T {
        return this[index];
    }

    contains(item: T): boolean {
        if (this.indexOf(item) != -1) {
            return true;
        } else {
            return false;
        }
    }

    clear() {
        this.splice(0, this.count);
    }
}

答案 1 :(得分:1)

要实现重载索引运算符的效果,您将必须use a proxy to get the runtime behavior,然后使用索引签名进行键入,如下所示:

interface List<T> {
    [n: number]: T;
}

但是代理是严肃的机器。使用方法调用的样板可能会更好。