实例化Typescript类时出错(错误不是构造函数)

时间:2016-07-11 11:42:16

标签: typescript

我是TypeScript的新手,并且在基本类实例化方面遇到了麻烦。

我有一个命名空间RecordsService,其中声明了类Record。我希望能够在RecordsService中创建记录,然后通过其他方法等公共方法访问它们。

export namespace RecordsService {

    let records: Array<Record> = new Array();

    function init () {
        let record1 = new Record(new Date(), 1);
    }
    init();

    export function getAllRecords() {
        return records;
    }

    class Record {

        constructor (public date: Date, public id: number) {
            this.date = date;
            this.id = id;
        }
    }
}

上面没有抛出任何转换错误,但是在运行时我得到了一个控制台错误,如下所示

  

TypeError:Record不是构造函数(...)

错误为let record1 = new Record(new Date(), 1);的行 在这种情况下如何创建新记录?

Plunker,查看控制台日志以查看错误:https://plnkr.co/edit/FNk8b1ZwA5HL3I7wAnTq?p=preview

1 个答案:

答案 0 :(得分:1)

您需要将Record课程移到init以上的职能:

class Record {
    constructor (public date: Date, public id: number) {
        this.date = date;
        this.id = id;
    }
}

let records: Array<Record> = new Array();

function init () {
    let record1 = new Record(new Date(), 1);
}
init();

或者在init的定义后调用Record函数:

let records: Array<Record> = new Array();

function init () {
    let record1 = new Record(new Date(), 1);
}

export function getAllRecords() {
    return records;
}

class Record {
    constructor (public date: Date, public id: number) {
        this.date = date;
        this.id = id;
    }
}

init();

发生这种情况的原因是javascript是一种解释型语言,解释器会在另一种语言之后解析代码行,因此它在解释{{1}之前到达init()部分(在原始代码中) }。class。

Record函数的内容在您执行函数之前不会被解释,这就是为什么在类定义之前将它安全并且之后执行它的安全原因。

另外,如果你这样做:

init

然后没有必要这样做:

constructor (public date: Date, public id: number)

它是:

this.date = date;
this.id = id;

或者

class Record {
    constructor (public date: Date, public id: number) {}
}