Typescript
Typescript 기초 문법 - 인터페이스
Yujzu
2024. 5. 9. 11:31
인프런 강의 Part 5. TS - 인터페이스
07. 인터페이스 기본
사용하는 이유 : 인터페이스는 이름을 붙혀줌으로써 재사용이 가능하다.
- 객체 데이터의 타입 지정
interface User {
name: string
readonly age: number // 읽기전용 속성, 수정 불가
inValid?: boolean // 선택적 속성
}
08. 함수의 타입 지정
// 호출 시그니처 (call signature)
// 함수 타입 지정하기
interface GetName {
(msg: string): string // 인터페이스 내부에 소괄호로 시작하여 인터페이스를 작성하는 방식: 호출 시그니처
}
// 매개변수 msg의 type은 string이고 string type을 반환한다.
(msg:string)=> string // 이 것과 같은 뜻이다.
- 인덱스 가능 타입
: 배열이나 객체 데이터의 타입을 지정하는 인터페이스 방식
인덱싱: 객체 데이터 속성을 줄떄 전표기법(.)이 아닌 대괄호 표기법([]) 을 사용하는 것
// 인덱스 시그니처 (index signature)
ex 1) 배열 데이터의 타입 지정하기
interface Fruits {
[item: number]: string
} // 인덱스 시그니처 문법
// item 은 요소의 순서 ( 0,1,2 )
const fruits: Fruits = ['apple,'banana',cherry']
fruits[1] // fruits 라는 배열 데이터의 첫번째 아이템에 대괄호 표기법으로 인덱싱을 한다.
ex 2) 객체 데이터의 타입 지정하기
interface User {
[key: string]: unknown // 객체 데이터에 값을 할당하는 것이 가능하다.
name: string
age: number
}
const heropy: User = {
name: 'Heropy',
age: 85
}
// heropy 라는 객체 데이터에 대괄호 표기법 인덱싱을 통해 값을 할당
heropy['isValid'] = true
heropy['emails'] = ['aa@co','bb@co']
console.log(heropy)
ex 3)
interface Payload {
[key: string]: unknown
}
function logValues(payload: Payload){
for (const key in payload) {
console.log(payload[key])
}
}
logValues(heropy)// 여기서 heropy의 타입도 [key: string] : unknown 이 포함되어 있어야 logValues의 매개변수로 쓰일 수 있음
- 확장(상속)
extends 키워드를 통해서 확장(상속) 가능
ex 1)
interface UserA {
name: string
age: number
}
interface UserB extends UserA { // UserA의 인터페이스 내용을 상속받아서 쓸 수 있다.
inValid: boolean
}
const heropy: UserA = {
name: 'Heropy',
age: 85,
inValid: true // error 발생, 사용 불가
}
const neo: UserB = {
name: 'Neo',
age: 102
isValid: true
}
ex 2)
interface FullName {
firstName: string
lastName: string
}
interface FullName { // 동일한 이름의 인터페이스를 만드는 것 가능하다.
middleName: string // 속성을 추가로 작성할 수 있다.
lastName: boolean // error, 하지만 기존 속성의 타입은 동일해야 한다.
}
const fullName: FullName = {
firstName: 'Tomas',
middleName: 'Sean',
lastName: 'Connery'
}