[英]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/FNk8b1ZwA5HL3I7wAnTq?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.