티스토리 뷰
프로퍼티에 타입을 정해서 객체를 정의하고자 할때 인터페이스를 사용한다.
인터페이스에서 정해준 타입이 아닌 값을 넣어주려고 해도 에러가 나고, 인터페이스에 있는 모든 프로퍼티를 다 넣어주지 않아도 에러가 난다.
interface User {
name : string,
age : number
}
let person : User = {
name : 'mike',
age : 60
}
interface User {
name : string,
age : number
}
// 에러
let person1 : User = {
name : 'mike',
age : '60살'
}
// 에러
let person2 : User = {
name : 'mike',
}
interface외에 새로운 속성을 추가하려고 하면 에러가 발생한다.
interface User {
name : string,
age : number
}
let person : User = {
name : 'mike',
age : 60
}
// 에러를 띄움
person.rank = 'A'
옵션 ?
입력을 해도 되고 안해도 되는 값은 ?을 사용해서 옵션으로 넣어 줄 수 있다.
interface User {
name : string,
age : number,
rank? : string
}
let person : User = {
name : 'mike',
age : 60
}
readonly
readonly를 붙여 값을 읽기만 하게 할 수도 있다. 최초에만 설정할 수 있고 그 이후에는 수정할 수 없다.
interface User {
name : string,
age : number,
rank? : string,
birthday : number
}
let person : User = {
name : 'mike',
age : 60,
birthday : 2000
}
// 에러 없음
person.birthday = 2022;
interface User {
name : string,
age : number,
rank? : string,
readonly birthday : number
}
let person : User = {
name : 'mike',
age : 60,
birthday : 2000
}
// 에러
person.birthday = 2022;
인덱스 시그니처
성적을 입력한다고 할 때 이렇게 일부만 입력하면 에러가 나기때문에
interface Student {
name : string,
1 : string,
2 : string,
3 : string,
4 : string,
}
let bong : Student = {
name : 'bong',
1 : 'A',
2 : 'C'
}
옵션으로 표현할 수 밖에 없다.
interface Student {
name : string,
1? : string,
2? : string,
3? : string,
4? : string,
}
let bong : Student = {
name : 'bong',
1 : 'A',
2 : 'C'
}
이렇게 길어질 때 문자열 인덱스 시그니처를 사용할 수 있다.
number를 key로 가지고 string을 value로 가지는 프로퍼티를 여러개 가진다는 뜻이다.
interface Student {
name : string,
[grade : number] : string; // [key : key타입] : value타입
}
let bong : Student = {
name : 'bong',
1 : 'A',
2 : 'C'
}
단순한 타입으로 받기에 너무 광범위해 들어갈 수 있는 값을 정해주고 싶을 때 문자열 리터럴 타입으로 값을 지정해줄 수 있다.
type Score = 'A' | 'B' | 'C' | 'D' | 'F';
interface Student {
name : string,
[grade : number] : Score;
}
let bong : Student = {
name : 'bong',
1 : 'A',
2 : 'C'
}
함수 정의
interface를 이용해서 함수도 정의할 수 있다.
// (인자1 : 인자1 타입, 인자2 : 인자2타입) return 값 타입
interface Add {
(num1 : number, num2 : number) : number
}
const add : Add = (a, b) => {
return a + b
}
Class 정의
implements
implements를 사용해서 class도 정의해줄수있다.
interface Car {
color : string,
wheel : number,
start() : void
}
class Bmw implements Car {
color;
wheel = 4;
constructor(c:string){
this.color = c;
}
start() {
console.log('start')
}
}
const firstCar = new Bmw('red');
extends
이미 선언된 interface를 상속받아서 확장할 수 있다.
interface Car {
color : string,
wheel : number,
start() : void
}
interface Benz extends Car {
stop() : void
}
const benz : Benz = {
color : 'red',
wheel : 4,
start() {
console.log('start')
},
stop() {
console.log('stop')
}
}
동시에 여러개도 확장할 수 있다.
interface Fruits {
name : string
}
interface Menu {
menuType : string
}
interface FruitMenu extends Fruits, Menu {
price : number
}
728x90
'유튜브 강의' 카테고리의 다른 글
[코딩앙마] 타입스크립트 4. 리터럴 타입 (0) | 2022.10.26 |
---|---|
[코딩앙마] 타입스크립트 3. 함수 타입 정의 (0) | 2022.10.26 |
[코딩앙마] 타입스크립트 1. 기본 타입 (0) | 2022.10.24 |
[Styled Components] Styled Components (feat. 노마드코더) (4) | 2022.08.28 |
[노마드코더] 타입스크립트로 블록체인 만들기 3. 타입스크립트 문법_클래스&인터페이스 + 활용 예제 (2) | 2022.08.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구름에듀
- 타입스크립트
- 파이썬
- git
- 리액트
- vscode
- React
- 스파르타코딩클럽
- scss
- js
- 회고
- 코드잇
- Til
- 제이쿼리
- 깃
- Typescript
- 제로초
- 드림코딩
- 코딩앙마
- Python
- 자바스크립트
- html
- 비주얼스튜디오코드
- vue
- 김버그
- TS
- map
- javascript
- 저스트코드
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함