[05] Type Script Class & Interface

HJ-C·2022년 4월 21일
0

TypeScript

목록 보기
5/9
post-thumbnail


Class

(1)필드값 타입지정

	class Person{
      data :number = 0;
	}
    
    let choi = new Person();
	let Kim = new Person();

(2)Constructor 타입지정

	class Person {
      name;
      age;
      constructor( a:string ){
        this.name = a;
        this.age = 20;
      }
    }
  • 필드 값으로 name과 age가 미리 정의되어있어야 constructor 안에서 사용 가능
  • name 속성을 타입지정 하려면 파라미터 안에 타입을 지정

(3) Methods 타입지정

	class Person {
      name;
      age;
      constructor( a:string ){
        this.name = a;
        this.age = 20;
      }
      sum() : number{
        return this.age + 1
      }
    }
  • 함수와 동일하게 파라미터 & return 타입지정이 자유롭다

Interface

(1) Interface

인터페이스는 상호 간에 정의한 약속 혹은 규칙

	interface User {
      name : string,
      age : number,
    }
      
    let student : User = { name : 'Choi, age : 20 }
  • type Alias와 용도와 기능은 동일
  • 변수명은 대문자로 작성
  • {} 안에 타입 명시
  • 콤마대신 세미콜론도 사용가능

(2) extends

class를 상속하는 클래스가 있듯이, interface 또한 extends 키워드를 사용해 인터페이스를 확장 할 수 있다

  //extends 사용 전
  interface Student {
    name :string,
  }
  interface Teacher {
    name :string,
    age :number,
  }
    
  //extends 사용 후
  interface Student {
    name : string,
  }
  interface Teacher extends Student{
    age : number
  }
  • Teacher 타입은 Student 속성인 age와 name속성을 가지고 있음

(3) interface 와 type 차이

(1) 확장하는 방법

	//interface
    interface PeopleInterface {
      name: string
      age: number
    }

    interface StudentInterface extends PeopleInterface {
      school: string
    }

	//type
    type PeopleType = {
      name: string
      age: number
    }

    type StudentType = PeopleType & {
      school: string
    }

(2) 선언명 중복 시

  • interface에서 할 수 있는 대부분 기능들은 type에서 가능하지만 type은 새로운 속성을 추가하기 위해서는 다시 같은 이름으로 선언할 수 없지만 interface는 항상 선언적 확장이 가능하다는 점
	//interface는 name,age 속성을 가짐
    interface Animal { 
      name :string 
    } 
    interface Animal { 
      legs :number 
    }

	// type은 중복선언을 허용하지 않는다
    type Animal = { 
      name :string 
    } 
    type Animal = { 
      legs :number 
    }

(3) 속성이 중복 시

	//error 
    interface Animal { 
      name :string 
    } 
    interface Dog extends Animal { 
      name :number 
    }

	//error
    interface Animal { 
      name :string 
    } 
    interface Dog { 
      name :number
    } 

    let Zoo :Dog & Animal = { name : '리트리버' }

단 name : 타입이 둘다 같다면 에러가 나지 않는다.

(4) 객체 사용

  • interface는 객체에서만 사용이 가능하다

interface도 type 처럼 & 기호를 이용해도 복사 가능

profile
생각을 기록하자

0개의 댓글

관련 채용 정보