カテゴリ

3150 ワード

タイプスクリプトは、JavaScriptのクラスも完全にサポートします.

1.プロパティの初期化


知っておくべきコンパイルオプション--strictPropertyInitializationオプションがあります.このオプションがtrueの場合

これにより、特定のプログラムの関連コードが初期化されていない場合にエラーが発生します.この問題を解決するには、次の手順に従います.

このように=シンボルを使用して初期化

これにより、コンストラクション関数に初期化コードが配置されます.

こんなふうに!タグ(Non-null assertion)のみで、propertyの値を適合タイプに設定する必要があることを示します.

2. readonly


propertyの前にreadonlyを設定すると、propertyの値はコンストラクション関数にしか設定できません.

3. Constructor


クラスのコンストラクタ
class Point {
  x: number;
  y: number;

  // Normal signature with defaults
  constructor(x = 0, y = 0) {
    this.x = x;
    this.y = y;
  }
}
このようにパラメータにデフォルト値を指定することもできます.
class Point {
  // Overloads
  constructor(x: number, y: string);
  constructor(s: string);
  constructor(xs: any, y?: any) {
    // TBD
  }
}
このように複数のコンストラクション関数を配置するリロードを行うことができます.逆にConstructorは通常の関数とは異なります
  • typeパラメータを持つことはできません...だからジェニーンリックにはなれない.
  • で返される値のタイプは表示されません.常にクラス内のオブジェクト
  • を返します.

    4. Method



    方法については,一般関数と異なる特別な点はない.

    5. Interface



    このようにして複数のインタフェースを実現することは可能である.

    6. Inheritance


    継承すると、派生クラスはBaseクラスのすべてのコンテンツを所有します.
    ただし、方法オーバーライドを行う際には、少し注意が必要です.

    このように方法の形式に合わせなければならない.もちろんこの状態でコンパイルできますが、

    これらのコードを実行すると、エラーが発生します.
    もちろん無理です.

    文字列値「michael」を入力すると、コンパイル後に実行され、よく実行されます.

    7. Built-in Type Inheritance


    ビルト人タイプを継承したい場合、ES 2015
    class MsgError extends Error {
      constructor(m: string) {
        super(m);
      }
      sayHello() {
        return "hello " + this.message;
      }
    }
    
    let msgError = new MsgError('sss');
    msgError.sayHello();
    このコードにエラーが発生しました.原因を説明するのは複雑です...

    8.StaticメンバーとTypeパラメータ


    クラス内の静的メンバーは、実際にはクラス(つまり、関数に直接属するメンバー)であり、クラス内のtypeparameterを参照することはできません.

    上のコードのBoxです.defaultValueはslotが1つしか存在しません.でもBoxがdefaultValueを修正するとこれはBoxdefaultValueも修正後に破棄された不良結果を得る.だから許されない.

    9. Relationships Between Classes



    クラス間のタイプ比較も構造的に行われます.

    ちなみに、任意のタイプのクラスと互換性のあるプログラムのクラスはありません.