无法访问typescript中扩展Array类的对象属性

时间:2018-02-11 23:05:26

标签: arrays typescript extending

好吧,也许已经很晚了,也许我已经做了太多的编程,但我现在被这个简单的课程困扰了:

export class Path extends Array {
    constructor(...params:Array<any>) {
        super(...Object.assign([], arguments));
    }
    until (node) {
        let pos = this.findIndex(element => node === element);
        return pos < 0 ? [] : this.splice(0, pos + 1);
    }
    get last () {
        return this.length ? this[this.length - 1] : undefined;
    }
}

当我从我的打字稿代码中调用它时,它会被初始化,但是这些方法都没有做任何事情:

path = new Path(1,2,3,4); // [1,2,3,4]
path.last; // undefined
path.until(3); // undefined

当然,如果我做了类似的事情,那就是#34;正常&#34; typescript类,又名不扩展Array的类,它工作得很好,又名

export class Bla {
    values = [];
    constructor(...params:Array<any>) {
        this.values = new Array(...Object.assign([], arguments));
    }
    until (node) {
        let pos = this.values.findIndex(element => node === element);
        return pos < 0 ? [] : this.values.splice(0, pos + 1);
    }
    get last () {
        return this.values.length ? this.values[this.values.length - 1] : undefined;
    }
}

结果:

bla = new Bla(1,2,3,4); // {values: [1,2,3,4]}
bla.last; // 4
bla.until(3) // [1,2,3]

它也应该。

最后,如果我将上面的Path代码粘贴到Chrome的开发控制台(没有ts类型

),那就更加侮辱伤害并使问题更加混乱
...params:Array<any>

和出口,当然),一切都很好:

path = new Path(1,2,3,4); // [1,2,3,4]
path.last; // 4
path.until(3) // [1,2,3]

那么,我在这里找不到什么难以理解的打字稿?

1 个答案:

答案 0 :(得分:0)

通过更简单的super调用,它对我来说很好用:

class Path extends Array {
    constructor(...params:Array<any>) {
        super(...params);
    }
    get last() {        
        return this.length ? this[this.length - 1] : undefined;
    }
}


const path = new Path(3, 2, 1);
console.log(path.last); // 1

enter image description here