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

BackEnd_Ash.log·2021년 6월 10일
0

typescript

목록 보기
5/17

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

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

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

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

선택 속성 (optional properties)

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

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

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

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

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

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

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

readonly

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

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

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

하지만

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

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

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

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

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

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

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

인덱스 타입

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

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

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

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

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

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

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

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

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

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

interface 로 함수타입 정의

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

오른쪽에 반환 타입을 입력

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

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

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

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

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

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

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

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

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

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

profile
꾸준함이란 ... ?

0개의 댓글