프론트엔드/typescript

Interface - 기본

lika-7 2023. 9. 17. 22:22

안녕하세요 lika-7입니다

오늘은TypeScript의 inteface가 무엇인지 정리하였습니다

Interface란

일반적으로 타입 체크를 위해 사용 합니다

변수, 함수, 클래스에 사용할 수 있습니다.

이를 통해 인터페이스에 선언된 프로퍼티 또는 메소드의 구현을 강제하여 일관성을 유지하도록 합니다.

인터페이스와 클래스

1. 유사점

  • 프로퍼티와 메소드를 가질 수 있다는 점에서 클래스와 유사

2. 다른점

  • 직접 인스턴스를 생성 할 수 없음
  • 모든 메소드는 추상 메소드임, 추상 클래스의 추상 메소드와 달리 abstract 키워드를 사용하지 않음

무엇을 사용해야 할까?

interface

1. 특정 유형의 객체들이 동일한 속성을 가지고 있을 때 interface를 통해 쉽게 구현 할 수 있다 2. 타입 체크 용도라면 interface 사용이 좋다

class

1. constructor 또는 함수 구현시 class를 사용하는 것이 좋다

변수와 인터페이스

기본 사용법

//TypeScript

//인터페이스의 정의
interface User {
    name: String
    readonly age: Number
    isValid: boolean
}
//heropy 변수의 타입은 User 인터페이스를 선언하였다.
const heropy: User = {
    name: 'Heropy',
    age: 85,
    isValid: true
}
//neo 변수의 타입은 User 인터페이스를 선언하였다.
const neo: User = {
    name: 'Neo',
    age: 102,
    isValid: true
}

선택적 속성

💡
선택적 속성은 해당 타입을 선언해도 되고 선언 하지 않아도 되는 것을 의미합니다
선택적 속성의 키워드는 ? 를 씁니다

//TypeScript

interface User {
    name: String
    age: Number
    isValid?: boolean
}
const heropy: User = {
    name: 'Heropy',
    age: 85,
    isValid: true
}
const neo: User = {
    name: 'Neo',
    age: 102
}

위의 예제에서 neo는 isValid 속성이 있어도 되고 없어도 됩니다.

읽기 전용

💡
읽기 전용은 초기화 이후 새로운 값을 할당 할 수 없음을 의미합니다
읽기 전용의 키워드는 readonly 를 씁니다
//TypeScript

interface User {
    name: String
    readonly age: Number
    isValid?: boolean
}
const heropy: User = {
    name: 'Heropy',
    age: 85,
    isValid: true
}
heropy.isValid= false
heropy.age = 12

const neo: User = {
    name: 'Neo',
    age: 102
}

위의 예제에서 age 속성은 readonly로 선언되어 있기에

heropy.age = 12 로 초기화 한 문장이 코드상 에러가 나게 됩니다.

인터페이스 함수