TypeScript_クラス

クラス

クラス宣言

クラス宣言は下記の通りです。

コンストラクタは「constructor()」を用います。

JavaScript と同様にTypeScriptにデストラクタはありません。


class A{
  constructor(){
    console.log('コンストラクタ関数');
  }
}

クラスのインスタンスを生成する場合はnewを使用します。


var a:A = new A();

修飾子

アクセス修飾子

クラスのプロパティ、メソッドは「private, public」を指定できます。

省略した場合は「public」となります。


class ErrorInfo {
  private code: number;
  private msg: string;

  constructor(msg: string, code: number) {
    this.msg = msg;
    this.code = code;
  }

  public print(): void {
    console.log(this.msg + ': err code = ' + this.code);
  }
}

let err:ErrorInfo = new ErrorInfo('Error occured.', -1);
err.print();

static修飾子

staticを付けることでその要素はインスタンスではなく、クラス自身の要素になります。


class Info {
  private static msg: string = 'static';
  static print(): void {
    console.log(this.msg);
  }
}

Info.print();

getter/setter

クラスメンバへのアクセスとしてアクセサが用意されています。


class ErrorInfo {
  private _code: number;
  private _msg: string;

  constructor() {
    this._msg = '';
    this._code = 0;
  }

  get msg() { return this._msg; }
  set msg(val: string) {
    this._msg = val;
  }
}

let err:ErrorInfo = new ErrorInfo();
err.msg = 'Error occured.';
console.log(err.msg);

tscでTypeScriptをコンパイルすると下記エラーが表示されます。


error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.

tscのオプションでEcmaScriptのバージョンを指定するオプションがあります。


$ tsc -t ES5 source.ts

継承

継承はextendsキーワードを使用します。


class SuperClass {
  constructor(private msg: string) {
    console.log('SuperClass constructor');
  }
  public print(): void {
    console.log('SuperClass method.');
    console.log(this.msg);
  }
}

class SubClass extends SuperClass {
  constructor() {
    console.log('SubClass constructor');
    super('inheritance');
  }
  public subPrint(): void {
    console.log('SubClass method.');
    this.print();
  }
}

let sc: SubClass = new SubClass;
sc.print();
sc.subPrint();

実行結果は下記の通りです。


SubClass constructor
SuperClass constructor
SuperClass method.
inheritance
SubClass method.
SuperClass method.
inheritance

関連ページ