3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TypeScript】クラス定義

Last updated at Posted at 2020-12-04

#はじめに
前回は【TypeScript】関数定義についてアウトプットしました。
今回はTypeScriptの**class定義**についてアウトプットします。

#クラスの型定義
次の Animal クラスは、1 つのプロパティ、1 つのコンストラクタ、1 つのメソッドを持っています。


class Animal {
    // プロパティ
    name: string;
    age: number;

    // コンストラクタ
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    // メソッド
    name() {
        console.log(this.name)
    }
    age() {
        console.log(this.age)
    }
}

※constructor(関数)の戻り値の型宣言は行わない

プロパティやメソッドの可視性はデフォルトでpublicになるため、外部からアクセスできないようにするには、明示的にprivateと指定する必要があります。

クラスのインスタンスを生成するには、次のように new キーワードを使用します。


const animal = new Animal('パンくん', 22);
animal.name(); // パンくん
animal.age(); // 22

#継承
extendsを使用することで継承できます。

class Animal {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    name() {
        console.log(this.name)
    }
    age() {
        console.log(this.age)
    }
}

class Dog extends Animal {
    weight: number;

    constructor(name: string, age: number, weight: number) {
        super(name, age);
        this.weight = weight;
    }

    weight() {
        console.log(this.weight)
    }
}

const dog = new Dog('ジェームズ', 7, 20);
dog.name();    // ジェームズ
dog.age();     // 3
dog.weight();  // 15

#プロパティ定義の省略

コンストラクタのパラメータの前にprivatepublicを指定すると、プロパティ定義とその値を設定するコードを省略することができます。


class Animal {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }
}

class Animal {
  constructor(private name: string) {}
}

#プロパティのsetter/getterの定義

メソッド名の前にsetキーワード、getキーワードを付けて定義することで、プロパティの setter/getterを定義することができます。 setter はプロパティへの代入時に呼び出され、getter はプロパティの参照時に呼び出されます。setter/getterは必ずpublicとして扱われます。


class Animal {
  private _name: string = '';

  set name(value: string) {
    console.log('名前が設定されました');
    this._name = value;
  }

  get name(): string {
    console.log('名前が呼ばれました');
    return this._name;
  }
}

const b = new Animal();
b.name = 'パンくん';  // 名前が設定されました
console.log(b.name);  // 名前が呼ばれました => パンくん

#参照
TypeScript Handbook: Classes

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?