250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리액트 메모이제이션
- 항해99 부트캠프
- 알고리즘
- 리액트 렌더링 최적화
- 코어자바스크립트
- this
- gql restapi 차이
- toggle-btn
- chromatic error
- JS module system
- Js module
- 웹 크롤링
- v8 원리
- 항해99 사전스터디
- js배열 알고리즘
- 리액트 메모
- 웹팩 기본개념
- FP 특징
- 자바스크립트 엔진 v8
- 테스트 코드 툴 비교
- 실행컨텍스트
- 리덕스
- 함수형 프로그래밍 특징
- 렌더링 최적화
- 항해99 미니프로젝트
- 타입스크립트
- 항해99
- 리액트
- jwt
- next js
Archives
- Today
- Total
Jaeilit
인터페이스 본문
728x90
인터페이스는 상호 간에 정의한 약속 혹은 규칙을 의미
- 객체의 스펙(속성과 속성의타입)
- 함수의 파라미터
- 함수의 스펙(파라미터, 반환 타입 등)
- 배열과 객체를 접근하는 방식
- 클래스
사용방법
interface 인터페이스_이름 {
속성?: 타입;
}
undefined의 경우도 예상되면 옵셔널체이닝으로 속성에 ? 붙여서 사용 할 수도 있음
interface CraftBeer {
name: string;
hop?: number;
}
let myBeer = {
name: 'Saporo'
};
function brewBeer(beer: CraftBeer) {
console.log(beer.name); // Saporo
}
brewBeer(myBeer);
파라미터 값으로 namer 과 hop 를 받아야하는데 hop 값이 undefined 일수도 있다는 것을 명시하기 위해 옵셔널체이닝?을 붙여서 사용
그 결과로 brewBeer 의 인자로 name만 넘겨도 에러가 나지 않는다.
읽기전용 속성
interface CraftBeer {
readonly brand: string;
}
let myBeer: CraftBeer = {
brand: 'Belgian Monk'
};
myBeer.brand = 'Korean Carpenter'; // error!
myBeer 의 값이 readonly 로써 읽기전용으로 타입정의가 되었을 때,
myBeer.brand 에 다른 값을 할당하려고하면 에러가 발생한다.
마찬가지로 배열도 ReadonlyArray<T> 로 읽기전용 배열을 만들 수 있다.
let arr: ReadonlyArray<number> = [1,2,3];
arr.splice(0,1); // error
arr.push(4); // error
arr[0] = 100; // error
읽기전용으로 선언 된 ReadonlyArray<T> 로 선언하면 배열의 내용을 변경 할 수 없다.
객체 선언과 관련된 타입 체킹
interface CraftBeer {
brand?: string;
}
function brewBeer(beer: CraftBeer) {
// ..
}
brewBeer({ brandon: 'what' }); //error
선언 된 타입은 brand 인데 brandon 을 넘겨버리면서 타입에러를 띄움
let myBeer = { brandon: 'what' }';
brewBeer(myBeer as CraftBeer);
as로 이런 타입을 무시할수있다.
만약 인터페이스 정의하지 않은 속성들을 추가로 사용하고 싶을 때는 아래와 같은 방법도 있음.
interface CraftBeer {
brand?: string;
[propName: string]: any;
}
함수 타입
interface login {
(username: string, password: string): boolean;
}
let loginUser: login;
loginUser = function(id: string, pw: string) {
console.log('로그인 했습니다');
return true;
}
const user:login = (id: string, pw: string) => {
console.log('로그인 했습니다');
return true;
}
클래스 타입
implements 타입으로 클래스형에도 타입을 정해줄 수 있다.
interface CraftBeer {
beerName: string;
nameBeer(beer: string): void;
}
class myBeer implements CraftBeer {
beerName: string = 'Baby Guinness';
nameBeer(b: string) {
this.beerName = b;
}
constructor() {}
}
인터페이스 확장
interface Person {
name: string;
}
interface Developer extends Person {
skill: string;
}
let fe = {} as Developer;
fe.name = 'josh';
fe.skill = 'TypeScript';
interface Person {
name: string;
}
interface Drinker {
drink: string;
}
interface Developer extends Person {
skill: string;
}
let fe = {} as Developer;
fe.name = 'josh';
fe.skill = 'TypeScript';
fe.drink = 'Beer';
확장으로써 기존 타입에 추가로 무언가 정해줄때 사용한다. (상속)
하이브리드 타입
자바스크립트의 유연하고 동적인 타입 특성에 따라 인터페이스 역시 여러 가지 타입을 조합하여 만들 수 있습니다. 예를 들어, 다음과 같이 함수 타입이면서 객체 타입을 정의할 수 있는 인터페이스가 있습니다.
interface CraftBeer {
(beer: string): string;
brand: string;
brew(): void;
}
function myBeer(): CraftBeer {
let my = (function(beer: string) {}) as CraftBeer;
my.brand = 'Beer Kitchen';
my.brew = function() {};
return my;
}
let brewedBeer = myBeer();
brewedBeer('My First Beer');
brewedBeer.brand = 'Pangyo Craft';
brewedBeer.brew();
728x90
'Typescript' 카테고리의 다른 글
배열 값을 순회하는 타입 만들기 (0) | 2022.12.13 |
---|---|
타스 - 타입 추론/호환 (0) | 2022.06.29 |
Union Types (0) | 2022.06.22 |
이넘(Enums) (0) | 2022.06.21 |
타입스크립트 - 기본타입 + 함수 (0) | 2022.06.15 |