타입스크립트 인터페이스

hb-developer·2021년 4월 26일
0

TypeScript

목록 보기
2/6

인터페이스란?

인터페이스는 사용자가 정의한 타입의 모음 입니다.

타입스크립트 에서만 사용하는 하나의 타입약속 이기 때문에

실제 자바스크립트에선 사용되지 않습니다. (컴파일 시에 지워버림)

interface user1 {
  name: string;
}

optional property

변수에 인터페이스 타입을 지정할때

해당 변수에는 인터페이스의 값들이 모두 존재 해야 합니다.

interface user1 {
  name: string;
  age: number;
}

const p1:user1 = {        // 오류 발생 age 값이 없음
  name : "Elon",                 
  
}

인자를 넘겨도 되고 안넘겨도 될때에는 ?: 형식으로 명시합니다.

interface user1 {
  name: string;
  age?: number;            // ?:
}
const p1:user1 = {        // 오류 없음
  name : "Elon",                  
}

indexable type

인터페이스를 사용할땐 속성값이 동일해야 합니다.

만약 구조를 추가해서 사용 하고 싶을때는 indexable type 을 사용할수 있습니다.

interface Foo{
  name: string;
  [index :string]:string 
}
const a : Foo = {
  name: 'Elon',
  hi:"hi",
  hello:"hello"
}

[indexName : indexer type ] :return type 형식으로 선언합니다.

name 과 같이 직접 표기한 것은 똑같이 명시 해야하지만
인덱서블 타입은 추가를 원할때 사용 하기 때문에 옵셔널 타입이라고 볼수 있습니다.

다만 인덱서 타입은 stringnumber 두가지만 사용 할수 있으며
선언된 즉시 인터페이스 안의 값들은 모두 인덱서 타입의 서브타입이 되야 합니다.

interface Foo{
  name: number;                  //오류발생 "number 는 string 에 할당이 불가능합니다" (서브타입 x)
  [index :string]:string 
}

따라서 보통의경우 인덱서블의 리턴타입을 늘리거나 any 를 사용합니다.

interface Foo{
  name: number;
  [index :string]:any            // 오류 없음
}

인터페이스 함수

함수의 타입도 인터페이스를 사용할수 있습니다.

interface Inum {
  (num1:number,num2:number):number
}

const sum : Inum = function(x,y){
  return x+y
} 

이때 sum : Inum 을 선언하면 함수 매개변수에는 굳이 타입을 지정하지 않아도 됩니다.

extends , readonly

extends 를 사용하면 상속을 받을수 있습니다.

interface IPerson {
  name: string
  readonly age?:number,
}

interface Iaddres extends IPerson{
  address:string
}

const user1: Iaddres = {
  name:"Elon",
  age:20,
  address:"USA"
}

만약 인터페이스 속성에 readonly 가 있으면 바꿀수 없습니다.

user1.age="25" //오류
   
profile
배우면 바뀐다

0개의 댓글