TS)クラスとインタフェース

12494 ワード

タイプスクリプトからクラスタイプとインタフェースタイプを理解します.

Class


JSとTSには若干の違いがある.
class Person { 
  constructor(name) {
    this.name = name // 자바스크립트는 동적필드추가 가능
  }
}

class Person { // 타입스크립트는 필드를 직접 정의해놓고 써야함
  name;
  age;
  constructor(name) {
    this.name = name
  }
}

let john = new Person('john');
let jack = new Person('jack');
TSでは、フィールドが予め指定されていないとエラーが発生します.
class Person {
  name:string;
  age:number;
  constructor(name:string){
    this.name = name;
  }
他郷の情は以前勉強したのと同じで、特に何もありません.
また、生産者関数については、他のタイプを指定することはできません!
エラーチェックを行う場合は、パラメータに直接タイプを指定する必要があります.次のような状況を見てください.
class Car {
  model:string
  price:number
  
  constructor(model,price) {
    this.model = model;
    this.price = price;
  }
}

new Car(44,33);  // 에러 안뜸!
number、numberをパラメータとして本番関数に渡していますが、フィールドに代入するときにエラーをキャプチャできません.
次は練習コードです
1つの例では、異なる入力を受信し、数字と文字を配列に別々に格納します.
パラメータを使うのもいいですね.
class Word{
  num: number[] = []
  str: string[] = []

  constructor(...array:(number|string)[]) {
    array.filter((ele)=>{
      if(typeof ele == 'string'){
        this.str.push(ele);
      }else {
        this.num.push(ele);
      }
    });
  }
  
}

console.log(new Word('kim',3,5,'park'));

Interface

interface Pallete {
  color: string,
  size:number
}

let bar:Pallete = {color:'black',size:200}
使用方法は、指定したオブジェクトタイプと同様です.

インタフェース特性1

  • を拡張できます.
  • interface Pallete extends Size {
      color: string, 
    }
    interface Size{
      size:number
    }
    let bar:Pallete = {color:'black',size:200}
    前述したように、各インタフェースを拡張することができる.
    type aliasを処理する際に、似たような機能&演算子を使用しました!
    下を見てください!
    // type alias 를 사용했을 때
    type Size = {
      size:number
    }
    
    type Pallete = Size & {color:string}
    
    &はクロス演算子で、extendsと似ていますが、原理は異なります.

    インタフェースのプロパティ2


    宣言
  • を繰り返した場合、extendsと同じ操作が実行されます.
  • interface Animal { 
      name :string 
    } 
    interface Animal { 
      legs :number 
    }
    // 위 코드는 아래와 같습니다.
    interface Animal { 
      name :string, 
      legs:number
    } 
    

    だからインタフェースが好きですか、タイプが好きですか。


    本当に厳格なコードを作りたいならtypeを使ったほうがいいです(繰り返し宣言時にエラー通知!ただしインタフェースはextendsを使用して操作)
    ただし、外部ライブラリを使用して変数をカスタマイズしたり、独自の変数を追加したりする必要がある場合は、インタフェースのextendsを使用することが望ましいです.
    状況によっては、両者を混用したほうがいい.