Front-end/TypeScript
[TypeScript] 인터페이스(interface)
hyebin Lee
2022. 3. 6. 15:58
객체 생성 시 오류 에러 발생
let user:object;
user = {
name:'xx',
age:30
}
console.log(user.name)
객체는 오브젝트 타입으로 정의 할 수 있다.
이때 console.log(user.name)을 찍으면 에러가 발생한다.
오브젝트에는 특정 속성값에 대한 정보가 없기 때문이다. property를 정의해서 객체를 정의할 때는 인터페이스를 사용한다.
property를 정의해서 객체 표현 ⇒ 인터페이스 사용
type Score = 'A' | 'B' | 'C' | 'F'; //타입 지정
interface User {
name:string,
age:number,
gender? : string, //물음표를 붙이면 옵션으로 써도 되고 안써도 된다.
readonly birthYear : number//값의 접근은 가능하지만 수정은 불가능 하다. (read only)
//여러개를 옵션으로 지정할 때, 문자열 인덱스 서명 추가
[grade:number] : Score;
//number을 키로 하고, Score type을 value로 받는 property를 여러개 받을 수 있다.
}
let user : User = { //User타입으로 명시, 어떤 property인지 정의를 해줘야한다.
name : 'xx',
age : 30,
birthYear : 2000,
1 : "A",
2 : "B"
}
console.log(user.age) //30
user.age = 10;
console.log(user.age) //10
user.gender = 'male'
user.birthYear = 1990; //읽기 전용이므로 에러가 발생한다.
- 물음표를 붙이면 옵션으로 써도 되고 안써도 된다.(옵션)
- readonly를 붙이면 값의 접근은 가능하지만 수정은 불가능 하다. (read only)
- 인터페이스 생성 후 인터페이스 타입으로 명시 하고, 어떤 property인지 정의를 해줘야한다.
- type Score = 'A' | 'B' | 'C' | 'F'; 와 같은 방법으로 타입을 지정한다.
- 인덱스 서명은 [grade:number] : Score 는 숫자로 인덱스 값이 정해질 때, Score 을 리턴한다.
인터페이스 함수 정의
//인터페이스로 함수 정의
interface Add{
(num1 : number , num2 : number) : number
//괄호, 인자값 리턴값
}
const add : Add = function(x,y){
return x + y;
}
add(10,20);
interface IsAdult {
(age : number) : boolean
}
const result : IsAdult = (age) => {
return age > 19
}
result(33) //true
인터페이스로 클래스 정의, implements
//인터페이스로 클래스 정의, implements
interface Car {
color : string,
wheels : number,
start() : void
}
class Bmw implements Car { //클래스 생성
color = "red"; //속성값 입력
wheels = 4;
start() {
console.log("go~");
}
}
//construct 사용
class Audi implements Car {
color;
constructor( c : string){//생성될 때 색상을 입력 받겠다.
this.color = c;
}
wheels = 4;
start() {
console.log("go!");
}
}
const b = new Audi('green')
console.log(b)
b.start()
인터페이스 확장 ⇒ extends
//extends
interface Car {
color : string,
wheels : number,
start() : void
}
interface Benz extends Car { //Car가 가지고 있던 속성을 그대로 받게 된다.
door : number; //추가로 정의가 가능하다.
stop() : void;
}
const benze : Benz = {
color : "black",
wheels : 4,
start(){
console.log('start')
},
door : 5,
stop(){
console.log('stop');
}
}
확장 여러개 가능
//extends 2
interface Car {
color : string,
wheels : number,
start() : void
}
interface Toy {
name : string
}
//두개의 인터페이스를 동시에 extends 가능
interface ToyCar extends Car, Toy {
price : number ;
}