객체와 인터페이스

Gmini.Y·2020년 7월 20일
0

object 타입으로 선언된 변수는 속성 이름이 다른 객체를 자유롭게 담을 수 있습니다.
아래 코드는 객체를 타입 상관 없이 변경하고 있습니다.

let o: object = { name: 'Jack', age: 32 };
o = { first: 1, second: 2 }

이렇게 동작하지 않게 만들기 위해 interface 구문을 사용합니다.

인터페이스 선언문

타입스크립트는 객체의 타입을 정의할 수 있게 하는 interface라는 키워드를 제공합니다.

interface 인터페이스 이름 {
  속성이름[?]: 속성 타입[,...]
}
interface IPerson {
  name: string,
  age: number,
};
let good: IPerson = { name: 'Jack', age: 32 };
let bad: IPersion = { name: 'Jack' }; // age 속성이 없으므로 오류

선택 속성 구문

인터페이스를 설계할 때 어떤 속성은 있어도 되고 없어도 되는 형태로 만들고 싶을 때 선택 속성을 사용합니다.

interface IPersion2 {
  name: string,
  age: number,
  etc?: boolean,
};
let good1: IPerson2 = { name: 'Jack', age: 32 };
let good2: IPerson2 = { name: 'Jack', age: 32, etc: true };

익명 인터페이스

타입스크립트는 interface 키워드도 사용하지 않고 인터페이스의 이름도 없는 인터페이스를 만들 수 있습니다. 이를 익명 인터페이스라고 합니다. 익명 인터페이스는 주로 다음처럼 함수를 구현할 때 사용됩니다.

function printMe(me: { name: string, age: number, etc?: boolean }) {
  console.log(
    me.etc ?
    	`${me.name} ${me.age} ${me.etc}` :
    	`${me.name} ${me.age}`
  );
};

0개의 댓글