2016-07-11 7 views
0

私はTypeScriptを初めて使用しており、基本クラスのインスタンス化に問題があります。Typescriptクラスのインスタンス化エラー(コンストラクタではないエラー)

私は、その内部に宣言されたクラスRecordを持つNamespace RecordsServiceを持っています。私は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; 
     } 
    } 
} 

上記のいずれかのtranspilingエラーをスローしませんが、私はエラーが私はこのケースで新しいレコードを作成するにはどうすればよいlet record1 = new Record(new Date(), 1); ある

TypeError: Record is not a constructor(…)

以下の行を使用してコンソールのエラーを取得する実行したとき?

Plunker、エラーを参照するには、ビューコンソールログ:

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関数を呼び出す:あなたはinit機能の上であるためにあなたのRecordクラスを移動する必要がhttps://plnkr.co/edit/FNk8b1ZwA5HL3I7wAnTq?p=preview

答えて

1

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(); 

これが発生する理由あなたが元のコードのinit()部分に到達してから、Recordクラスを解釈する前に、インタープリタはコード行を解析します。

関数の内容は、関数を実行するまで解釈されません。なぜなら、関数をクラス定義の前に置いて、それを後で実行するのが安全だからです。

あなたは、このやっている場合にも、:

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; 
    } 
} 
+0

おかげで、エラーは私が知っているが、考えていないばかげたことです –

関連する問題