본문 바로가기
프론트엔드/TypeScript

인터페이스

by alswlfl 2023. 1. 3.

인터페이스

: 상호 간에 정의한 약속 혹은 규칙

  • 객체는 object타입으로 명시
  • object에는 특정 속성 값에 대한 정보가 없음
  • property를 정의해서 객체를 표현하고자 하는 경우 인터페이스 사용
let user:object;  //객체는 object타입으로 명시
user={
  name:'xx'
  age:30
}
console.log(user.name)  //오류발생 -> object에는 특정 속성 값에 대한 정보가 없음

인터페이스 사용

  • optional: ?로 작성
  • readonly: 읽기 전용 속성(수정 불가능)
  • [key]:value 로 설정하여 여러 개 사용 가능
type Score='A'|'B'|'C'|'F';

interface User{
  name: string;
  age:number;
  gender? : string;  //gender는 사용해도 되고 안해도 되는 optional -> ?로 작성
  readonly birthYear:number;  //readonly는 읽기 전용 속성 -> 수정할 수 없음(생성시에만 할당 가능하고 그 이후에는 변경 불가)
  //문자열 인덱스 서명 추가하는 방법
  [grade:number]:string;  //number를 key로 하고, string을 value로 설정하여, 여러 개 가능
  // [grade:number]:Score;  //Score에 있는 값 이외에는 입력 불가능
}
let user: User= {
  name:'xx',
  age:30,
  birthYear: 2000,
}
user.age=10;
user.gender="male";

console.log(user.age)

인터페이스로 함수 정의하기

  •  (인자 값): 반환 값
interface Add{
  (num1:number, num2:number): number;  //(인자 값):반환 값
}

const add: Add=function(x,y){
  return x+y;
}

add(10,20);

interface IsAdult{
  (num:number): boolean;  
}

const isAdult: IsAdult=(x)=>{
  return x>19;
}

인터페이스로 클래스 정의하기

  • 인터페이스로 클래스 정의 할 때, implements 사용
  • 인터페이스 확장 할 때 extends 사용
//implements
interface Car{
  color: string;
  wheels:number;
  start():void;
}

class Bmw implements Car{
  color;
  wheels=4;
  constructor(c:string){
    this.color=c;
  }
  start(){
    console.log('go...')
  }
}
const b=new Bmw('green');

//extends 인터페이스 확장 하기
interface Benz extends Car{
  door:number;
  stop():void;
}

class Benz implements Car{
   color;
  wheels=4;
  constructor(c:string){
    this.color=c;
  }
  start(){
    console.log('go...')
  }
}

'프론트엔드 > TypeScript' 카테고리의 다른 글

제네릭  (0) 2023.01.03
클래스  (0) 2023.01.03
리터럴, 유니온/교차 타입  (0) 2023.01.03
함수  (0) 2023.01.03
TypeScript 사용 이유와 기본 타입  (0) 2023.01.03