오늘 타입스크립트를 처음 공부해 보았고
그 중에서 오늘 익혀본 interface에 대해 작성해보겠다.
pratice.ts
파일에 코드를 작성하고 터미널에 tsc
명령어를 입력하면
dist 디렉터리에 practice.js
파일이 생성된다.
(우리가 tsconfig.json
파일에 경로를 지정한 "outDir": "./dist"
)
다음엔, node dist/practice
명령어를 입력하여 컴파일된 스크립트를 실행시켜 볼 수 있다.
> interface 사용해보기
interface는 클래스 또는 객체를 위한 타입을 지정 할 때 사용되는 문법이다.
클래스에서 interface 를 implements 하기
일반 객체를 interface로 타입 설정하기
> 클래스에서 interface 를 implements 하기
interface Shape { getArea(): number; }
interface
를 선언Shape interface
에는 getArea
라는 함수가 꼭 있어야 하며 해당 함수의 반환값은 숫자임을 의미한다.class Circle implements Shape { constructor(public radius: number) { this.radius = radius; } getArea() { return this.radius * this.radius * Math.PI; } // 너비를 가져오는 함수를 구현 }
implements
키워드를 사용하여 해당 클래스가 Shape interface
의 조건을 충족하겠다는 것을 명시한다.class Rectangle implements Shape { constructor(private width: number, private height: number) { this.width = width; this.height = height; } getArea() { return this.width * this.height; } }
public
으로 선언된 값은 클래스 외부에서 조회 할 수 있으며
private
으로 선언된 값은 클래스 내부에서만 조회 할 수 있다.
circle 의 radius 값은 클래스 외부에서 조회 할 수 있지만,
rectangle 의 width 또는 height 값은 클래스 외부에서 조회 할 수 없다.
const circle = new Circle(5); const rectangle = new Rectangle(10, 5); console.log(circle.radius); console.log(rectangle.width); //error! const shapes: Shape[] = [new Circle(5), new Rectangle(10, 5)]; shapes.forEach((el) => { console.log(el.getArea()); });
console.log(rectangle.width);
=> ERROR!!private
width값은 클래스 외부에서 조회할 수 없기 때문이다!> 일반 객체를 interface로 타입 설정하기
interface Person { name: string; age?: number; } interface Developer extends Person { skills: string[]; }
?
는 설정을 해도 되고 안해도 되는 값이라는 것을 의미extends
를 사용해서 상속받을 수 있다.const person: Person = { name: "김사람", age: 20, }; const expert: Developer = { name: "김개발", skills: ["javascript", "react"], }; const people: Person[] = [person, expert];