ページへ戻る

− Links

 印刷 

TypeScriptのClass のソース :: NJF Wiki

xpwiki:TypeScriptのClassのソース

« Prev[3]  
内容は公式ページとだいたい同じなので、そちらも参照のこと。
[[http://www.typescriptlang.org/Handbook]]

*クラスの定義 [#b96dc364]

TypeScriptではプロトタイプベースではない、Javaなどと同様のクラス定義が使える。
ただし、「this」は省略不可。コンストラクタはクラス名ではなく「constructor」。プロパティやメソッドの定義に「var」や「function」は不要。

 class TestClass{
     prm1:number;
     
     constructor(arg:number){
         this.prm1 = arg;
     }
     showNumber():void{
         alert(this.prm1 + "です");
     }
     
 }
 
 var testClass:TestClass = new TestClass(2);
 
 testClass.showNumber();//=>2です

*継承 [#i01186ac]

extendsを使うと継承も可能。親クラスにはsuperでアクセス。子クラスのコンストラクタは処理が同じなら省略可能。

 class TestClass{
     prm1:number;
     
     constructor(arg:number){
         this.prm1 = arg;
     }
     showNumber():void{
         alert(this.prm1 + "です");
     }
     
 }
 
 class TestExtended extends TestClass{
     
     showNumber(){
         this.prm1 ++;
         super.showNumber();
     }
 }
 
 
 var testExtended:TestExtended = new TestExtended(2);
 
 testExtended.showNumber(); // => 3です

*アクセス修飾子 [#e79aed65]

アクセス修飾子は「public」と「private」がある。省略したときはpublicが採用される。
publicはどこからでもアクセス可能で、privateはそのクラスの中からのみアクセス可能。privateを指定すると継承したクラスからもアクセスできない。たとえば上の例で

 private prm1:number;

とすると、継承したクラスでprm1にアクセスしているため、エラーが発生する。

**引数のアクセス修飾子 [#y3ce730b]

アクセス修飾子をコンストラクタの引数で使うとクラスプロパティの初期化のシンタックスシュガーとなる。つまり

 class TestClass{
    
    constructor(public prm1:number){ }
    
 }

と
 class TestClass{
    prm1:number;
    
    constructor(arg:number){
        this.prm1 = arg;
 }

は同じである。ただしコンストラクタ以外の引数でアクセス修飾子は使えない。

*アクセサー [#haa297e3]
getやsetといったアクセサーが使える。ただし、ECMAScript 5でないと対応していないため、コンパイル時に設定が必要。また対応していないブラウザでエラーが出るかも。

 tsc -t ES5 yourfile.ts

文法は以下の通り。

 class TestClass{
     private _prm1:number;
     
     get prm1():number{
         return this._prm1;
     }
     set prm1(p:number){
         this._prm1 = p;
     }
     
     
     showNumber():void{
         alert(this.prm1  + "です");
     }
     
 }
 var tc:TestClass = new TestClass();
 tc.prm1 = 10;
 tc.showNumber() // => 10です

*スタティック変数 [#b92a80f6]

インスタンスではなく、クラスに属するスタティック変数を定義することもできる。

 class TestClass1{
     static prm:number = 1;
     
     
     showPrm(){
         alert(TestClass1.prm);
     }
 }
 
 TestClass1.prm = 100;
 
 var tc:TestClass1 =new TestClass1();
 
 tc.showPrm() // => 100

« Prev[3]