인터페이스는 순수 타입스크립트 기능이다.
인터페이스는 클래스와 다르게 청사진으로 사용하지 않는다.
클래스는 인스턴스화할 수 있고 컴파일 되지만
인터페이스는 인스턴스화할 수 없고 컴파일되지 않는다.
인터페이스는 객체(또는 함수 타입)를 서술하지만
유니온 타입과 같은 임의 타입을 저장하거나 서술하지 않는다.
interface AddFn {
(a: number, b: number): number;
}
let add: AddFn;
add = (n1: number, n2: number) => {
return n1 + n2;
};
interface Named {
readonly name?: string;
outputName?: string;
}
interface Greetable extends Named {
greet(phrase: string): void;
}
class Person implements Greetable, Named {
name?: string;
age = 30;
constructor(n?: string) {
if (n) {
this.name = n;
}
}
greet(phrase: string) {
if (this.name) {
console.log(phrase + ' ' + this.name);
} else {
console.log('Hi');
}
}
}
let user1: Greetable;
user1 = new Person();
user1.greet('Hi there - I am');
console.log(user1);