타입스크립트-인터페이스

BackEnd_Ash.log·2021년 6월 10일
0

typescript

목록 보기
5/17

인터페이스는 클래스를 구현하기 전에 필요한 메서드를 정의하는 용도로 사용합니다.

타입스크립트에서는 좀 더 다양한 것들을 정의하는데 사용한다 .

객체의 타입을 정의하는 방법

인터페이스 image

age 는 속성이 number 이기때문에 문자열을 넣을려고 하면 에러가 발생한다.

선택 속성 (optional properties)

선택 속성은 객체에서 없어도 되는 속성을 말하는데요

인터페이스 image

만약에 age 를 선택속성이 아니라

인터페이스 image

이렇게 정의를 했다면 에러가 발생하게 된다.

속성과 조금 다르기 때문이다 .

age 를 무조건 입력을 해야하고 undefined 를 입력해야한다는 의미이다.

인터페이스 image

그래서 undefined 를 입력해줘야한다.

인터페이스 image

물론 숫자를 입력해줘도 된다.

인터페이스 image

readonly

인터페이스 image

말 그대로 읽기전용이기때문에 값을 변경할려고 하면 에러가 발생하게 된다.

보통은 객체가 interface 에 정의되지 않은 속성값을 가지고 있어도 할당이 가능하다.

인터페이스 image

p2 객체 안에 birthday 라는 속성값이 있는데 , 하지만 Person 안에는 birthday 가 없다.

하지만

인터페이스 image

이와 같이 p2 를 Person 타입에 입력을 할수가 있다.

이유는 p3 타입이 p2 의 타입을 포함하는 더 큰 타입이기 때문이다.

나중에 타입 호환성 부분에서 더 자세히 설명을 할것이다.

인터페이스 image

지금은 이 코드에서 리터럴 로 값을 할당하고 있는데 이렇게 리터럴로 값을 초기화하는 경우에는 interface에 정의되지 않은 속성값이 있으면 타입에러가 발생한다.

이렇게 리터럴을 사용할 때 에러가 발생하는 이유는

인터페이스 image

역시나.. 사람의 실수가 높다.

그래서 이것은 실수를 줄여주기 위한 타입스크립트의 편의 기능 이라고 생각하면 된다

인덱스 타입

인터페이스 image

interface 에서 속성 이름을 구체적으로 정의하지 않고 ,

값의 타입만 정의하는 것을 인덱스 타입이라고 한다.

인터페이스 image

아무거나 입력을 해도 상관이 없다.

인터페이스 image

age 속성 타입이 위에 명시적으로 사용하기 있기때문이다.

자바스크립트에서는 속성 이름에 숫자와 문자열을 사용할 수 있다.

그리고 속성 이름에 숫자를 사용하면 내부적으로 문자열로 변환해서 사용을 합니다.

인터페이스 image

숫자의 값 A 는 B 로 할당 가능해야한다.

인터페이스 image

인터페이스 image

A 를 number 라고 정의하고 , B 를 string 또는 number 라고 정의했다.

인터페이스 image

그런데 이렇게 뒤에 뒤에부분을 지워주게 되면 ,

number 는 string 에 할당 가능하지 않기 때문에 , 에러가 발생한다.

인터페이스 image

interface 로 함수타입 정의

인터페이스 image

interface 로 함수의 타입을 정의했는데, 왼쪽에 매개변수를 입력

오른쪽에 반환 타입을 입력

인터페이스 image

interface 로도 함수타입을 정의할수있다는것을 보여준거다.

자바스크립트에서는 함수도 속성값을 가질수 있다.

인터페이스 image

interface 는 클래스로 구현될수있다.

인터페이스 image

만약에 interface 에서 정의한 속성을 정의하지 않으면 에러가 발생한다.

인터페이스 image

interface 를 확장해서 새로운 interface 를 만들수있다.

인터페이스 image

인터페이스 image

여러개의 interface 를 확장 할수도 있다.

인터페이스 image

인터페이스 image

교차타입을 이용해서 여러개의 interface 를 확장할 수 있다.

인터페이스 image

인터페이스 image

교차타입은 집합에서 교집합과 같은 기능을 한다.

그런데 PP 의 타입이 name 속성만 포함하는게 아니다 왜지 ??

인터페이스 image

이것은 속성의 교집합이 아니라 타입이 가질 수 있는 값의 집합에 대한 교집합 이기 때문이다.

인터페이스 image

profile
꾸준함이란 ... ?

0개의 댓글