簡體   English   中英

實例化Typescript類時出錯(錯誤不是構造函數)

[英]Error instantiating Typescript Class (Error not a constructor)

我是TypeScript的新手,並且在基本類實例化方面遇到麻煩。

我有一個名稱空間RecordsService,其中聲明了類Record。 我希望能夠在RecordsService中創建Records,然后通過其他方法之類的公共方法訪問它們。

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:記錄不是構造函數(…)

錯誤行let record1 = new Record(new Date(), 1); 在這種情況下,如何創建新記錄?

柱塞,查看控制台日志以查看錯誤: https ://plnkr.co/edit/FNk8b1ZwA5HL3I7​​wAnTq?p=preview

您需要將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();

或在Record定義后調用init函數:

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是一種解釋語言,解釋器依次解析了代碼行,因此它在解釋Record類之前到達了init()部分(在您的原始代碼中)。

在執行函數之前,不會解釋init函數的內容,這就是為什么在類定義之前擁有它,然后在之后執行它是安全的。

另外,如果您正在執行此操作:

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

然后,無需執行此操作:

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

可能是:

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

要么

class Record {
    public date: Date;
    public id: number;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM