タイプスクリプトのカテゴリ


クラス定義

class Person {
  //클래스 프로퍼티를 사전 선언하여야 한다.
  name: string;
  constructor ( name: string ) {
  //클래스 프로퍼티수에 값을 할당
    this.name = name;
  }
  walk() {
  	console.log(`${this.name} is walking.`);
  }
}
const person = new Person('Lee');
person.walk(); // Lee is walking
クラスエンティティにクラスpropertyを事前に宣言する必要があります.

アクセス制限


クラスベースのオブジェクト向け言語サポートをサポートするアクセス制限者public, private, protected.

アクセス制限が指定されていない場合、デフォルトはpublicです.
class Foo{
  public x: string;
  protected y: string;
  private z: string;
  
  constructor( x: string, y: string, z:string ){
  	this.x = x;
    this.y = y;
    this.z = z;
  }
}

const foo = new Foo('x','y','z')

console.log(foo.x);
//프로퍼티 x 는 퍼블릭이므로 클래스 인스턴스를 통해 클래스 외부에서 참조 가능
console.log(foo.y);
//프로퍼티 y 는 프로젝티드이므로 클래스 인스턴스를 통해 클래스 외부에서 참조 불가하지만 자식 클래스에서는 참조 가능
console.log(foo.z);
//프로퍼티 z 는 프라이빗이므로 클래스 인스턴스는 물론 자식 클랙스에서도 참조 불가

readonlyキーワード

class Foo {
  private readonly MAX_LEN: number = 5;
  private readonly MSG: string;

  constructor() {
    this.MSG = 'hello';
  }

  log() {
    // readonly가 선언된 프로퍼티는 재할당이 금지된다.
    this.MAX_LEN = 10; // Cannot assign to 'MAX_LEN' because it is a constant or a read-only property.
    this.MSG = 'Hi'; // Cannot assign to 'MSG' because it is a constant or a read-only property.

    console.log(`MAX_LEN: ${this.MAX_LEN}`); // MAX_LEN: 5
    console.log(`MSG: ${this.MSG}`); // MSG: hello
  }
}

静的キー


ES 6クラスでは、staticキーワードはクラスの静的メソッドを定義する.静的メソッドは、クラスインスタンスではなくクラス名を呼び出します.したがって、クラスインスタンスを作成する必要はありません.
class Foo {
  constructor(prop) {
    this.prop = prop;
  }

  static staticMethod() {
    /*
    정적 메소드는 this를 사용할 수 없다.
    정적 메소드 내부에서 this는 클래스의 인스턴스가 아닌 클래스 자신을 가리킨다.
    */
    return 'staticMethod';
  }

  prototypeMethod() {
    return this.prop;
  }
}

// 정적 메소드는 클래스 이름으로 호출한다.
console.log(Foo.staticMethod());

const foo = new Foo(123);
// 정적 메소드는 인스턴스로 호출할 수 없다.
console.log(foo.staticMethod()); // Uncaught TypeError: foo.staticMethod is not a function

抽象クラス


抽象クラスには、1つ以上の抽象メソッドが含まれていてもよいし、通常のメソッドが含まれていてもよい.抽象メソッドとは、コンテンツがなく、メソッド名とタイプのみを宣言するメソッドで、宣言時にabstractキーワードを使用します.インスタンスを直接生成することはできません.継承にのみ使用できます.
abstract class Animal {
  // 추상 메소드
  abstract makeSound(): void;
  // 일반 메소드
  move(): void {
    console.log('roaming the earth...');
  }
}

// 직접 인스턴스를 생성할 수 없다.
// new Animal();
// error TS2511: Cannot create an instance of the abstract class 'Animal'.

class Dog extends Animal {
  // 추상 클래스를 상속한 클래스는 추상 클래스의 추상 메소드를 반드시 구현하여야 한다
  makeSound() {
    console.log('bowwow~~');
  }
}

const myDog = new Dog();
myDog.makeSound();
myDog.move();