인터페이스
: 상호 간에 정의한 약속 혹은 규칙
- 객체는 object타입으로 명시
- object에는 특정 속성 값에 대한 정보가 없음
- property를 정의해서 객체를 표현하고자 하는 경우 인터페이스 사용
let user:object; //객체는 object타입으로 명시
user={
name:'xx'
age:30
}
console.log(user.name) //오류발생 -> object에는 특정 속성 값에 대한 정보가 없음
인터페이스 사용
- optional: ?로 작성
- readonly: 읽기 전용 속성(수정 불가능)
- [key]:value 로 설정하여 여러 개 사용 가능
type Score='A'|'B'|'C'|'F';
interface User{
name: string;
age:number;
gender? : string; //gender는 사용해도 되고 안해도 되는 optional -> ?로 작성
readonly birthYear:number; //readonly는 읽기 전용 속성 -> 수정할 수 없음(생성시에만 할당 가능하고 그 이후에는 변경 불가)
//문자열 인덱스 서명 추가하는 방법
[grade:number]:string; //number를 key로 하고, string을 value로 설정하여, 여러 개 가능
// [grade:number]:Score; //Score에 있는 값 이외에는 입력 불가능
}
let user: User= {
name:'xx',
age:30,
birthYear: 2000,
}
user.age=10;
user.gender="male";
console.log(user.age)
인터페이스로 함수 정의하기
- (인자 값): 반환 값
interface Add{
(num1:number, num2:number): number; //(인자 값):반환 값
}
const add: Add=function(x,y){
return x+y;
}
add(10,20);
interface IsAdult{
(num:number): boolean;
}
const isAdult: IsAdult=(x)=>{
return x>19;
}
인터페이스로 클래스 정의하기
- 인터페이스로 클래스 정의 할 때, implements 사용
- 인터페이스 확장 할 때 extends 사용
//implements
interface Car{
color: string;
wheels:number;
start():void;
}
class Bmw implements Car{
color;
wheels=4;
constructor(c:string){
this.color=c;
}
start(){
console.log('go...')
}
}
const b=new Bmw('green');
//extends 인터페이스 확장 하기
interface Benz extends Car{
door:number;
stop():void;
}
class Benz implements Car{
color;
wheels=4;
constructor(c:string){
this.color=c;
}
start(){
console.log('go...')
}
}
'프론트엔드 > TypeScript' 카테고리의 다른 글
제네릭 (0) | 2023.01.03 |
---|---|
클래스 (0) | 2023.01.03 |
리터럴, 유니온/교차 타입 (0) | 2023.01.03 |
함수 (0) | 2023.01.03 |
TypeScript 사용 이유와 기본 타입 (0) | 2023.01.03 |