웹개발/TypeScript

TypeScript#3 인터페이스

atreyual 2022. 1. 27. 18:36
  • 인터페이스는 Object 형태로 사용하지 못하는 속성을 참고할 경우에 사용한다. 아래의 코드를 보자.
let user:Object = {
    name : 'kim',
    age : 30
};

// error 
console.log(user.name);

Object에는 특정한 속성을 참조할 수 있는 기능이 없다.

 

  • 이럴경우 interface를 사용할 수 있다.
interface User {
    name : string;
    age : number;
}

let user:User = {
    name : 'kim',
    age : 30
}

console.log(user.name);

user.age = 30;

interface를 선언할 때에도 각 타입을 지정하고 해당 인터페이스 타입으로 변수를 선언하여 get, set 하여 사용할 수 있다.

 

  • 만약 name과 같은 string 형 타입을 100개 사용한다고 하면 어떨까? 물론 interface 부분에 100개를 선언해줘도 정상적으로 동작한다. 하지만 아래와 같은 방법을 사용할 수 있다.
type Score = 'A' | 'B' | 'C' | 'D';

interface User {
    name : string;
    age : number;
    [grade:number] : Score;
}

let user:User = {
    name : 'kim',
    age : 30,
    1 : 'A',
    2 : 'C',
    3 : 'D'
}

 

[grade:number] : Score의 grade에는 아무런 문자나 들어가도 상관없다. key number, 값 string의 형식만 맞다면 무한대로 값을 입력할 수 있다. Score라는 타입을 만들고 해당 타입으로 [grade:number]을 설정한다면 Score에 설정된 값만 입력될 수 있다.

 

  • interface로 함수를 작성하는 방법이다.
interface minus {
    (numb1:number, numb2:number):number;
}

const minus2 : minus = function(num1, num2) {
    return num1 - num2;
}

위와 같이 작성된다면 minus로 만들어진 변수는 무조건 number 형태의 파라메터 2개를 가져야 하고 return 값이 number이어야지만 정상적으로 동작하는 함수이다.

 

interface isMan {
    (gender:string):boolean;
}

const isMan2:isMan = (gender) => {
    return gender === 'Man';
}

위와 같이 사용한다면 문자열 파라메터를 받아서 문자열 비교 후 true, false 값으로 return하는 함수를 만들 수 있다.

 

 

  • interface를 사용하여 class를 만들어서 사용할 수도있다.
interface phone {
    type : string;
    color : string;
    price : number;
}

class myPhone implements phone {
    type;
    color;
    price;

    constructor(type:string, color:string, price:number) {
        this.type = type;
        this.color = color;
        this.price = price;
    }
}

const myphone = new myPhone('iphone', 'white', 30000);

 

phone라는 인터페이스를 만들고 myPhone에서 상속받아 생성자로 사용하는 부분이다.