2017-12-22 5 views
0

私は新しいメニュークラスを作成できますが、コンストラクタを使用するとできません。クラス内のコンストラクタを使用するTypescriptは新しいキーワードを許可しません

model = new Menu(); 

私はその後、

this.model.AppGroupID = UserID; 

コンポーネントの各プロパティを設定できるように:ABOVE

import { Menu } from '../../models/menu-model'; 

model = new Menu(); 

let UserID = params['UserID']; 
this.model.AppGroupID = UserID; 

コンストラクタ

メニュー-model.tsファイルを使用しない場合は正常に動作します

export class Menu { 
    UserID: number; 
    AppID: number; 
    NavAppID: number; 
    AppGroupID: number; 
    SelectedCaseID: number; 
    SelectedRoleID: number; 
} 

上記はうまく動作します しかし、なぜ、どのように私はこれのためのコンストラクタを使用することができますか?どんな利益?

export class Menu { 
    constructor(
     public UserID: number, 
     public AppID: number, 
     public NavAppID: number, 
     public AppGroupID: number, 
     public SelectedCaseID: number, 
     public SelectedRoleID: number 
    ) { } 

} 
+1

コンストラクタをパラメータで定義する場合、コンストラクタを呼び出すときにそれらのパラメータの引数を指定する必要がありますか? –

+0

エラーメッセージをお読みになりましたか? – SLaks

答えて

2

私は考えているいくつかの異なる概念を混乱させています。

は、この:あなたは、それは基本的に空のコンストラクタと同じですコンストラクタを指定しない場合には(私は基本的にそれはだと言う

export class Menu { 

    constructor(
    ) { } 

    UserID: number; 
    AppID: number; 
    NavAppID: number; 
    AppGroupID: number; 
    SelectedCaseID: number; 
    SelectedRoleID: number; 
} 

すなわち:

export class Menu { 
    UserID: number; 
    AppID: number; 
    NavAppID: number; 
    AppGroupID: number; 
    SelectedCaseID: number; 
    SelectedRoleID: number; 
} 

は、基本的にはこれと同じです基本クラスを拡張する場合は少し異なります)。

しかし、この:

export class Menu { 
    constructor(
     public UserID: number, 
     public AppID: number, 
     public NavAppID: number, 
     public AppGroupID: number, 
     public SelectedCaseID: number, 
     public SelectedRoleID: number 
    ) { } 
} 

は違うのです。パラメータでコンストラクタを定義する場合は、コンストラクタを呼び出すときにそれらのパラメータの引数を指定する必要があります。

コンストラクタパラメータを「public」として宣言するので、クラスのプロパティにもなります。

これはおそらく紛らわしいことでしょうか?コンストラクタでこれらのプロパティを作成する必要はありません。これは単に便利な省略形です。

コンストラクタ呼び出しで引数を指定したくない場合は、コンストラクタのパラメータを作成せず、最初の例のように直接クラス本体に宣言してください。

+0

publicとコンストラクタを使用して 'model = new Menu();'を実行できませんか?だから私はこれらのプロパティを設定することができます 'this.model.AppGroupID = UserID;'? –

+0

はい、model = new Menu()は実行できません。代わりにプロパティを直接設定します。パブリックコンストラクタパラメータを持つコンストラクタと混同しないでください。2つの非常に異なるものです。あなたは他のものなしで1つを持つことができます。 –

関連する問題