함수 표현식에 타입을 넣을 때 2가지 방식
const printSomething = (thing: string): void ⇒ console.log(thing);
const printSomething: (thing:string) ⇒ void = thing ⇒ console.log(thing);
Class
Class는 es5로 컴파일하면 생성자 함수, 프로토타입 스타일로 바뀐다.
class Department {
// private id: string;
// private name: string;
private employees: string[] = [];
constructor(private readonly id: string, public name: string) {}
describe(this: Department) {
console.log(`Department (${this.id}): ${this.name}`);
}
addEmployee(employee: string) {
this.employees.push(employee);
}
printEmployeeInformation() {
console.log(this.employees.length);
console.log(this.employees);
}
}
class ITDepartment extends Department {
constructor(id: string, public admins: string[]) {
super(id, 'IT');
}
}
class AccountingDepartment extends Department {
private lastReport: string;
get mostRecentReport() {
if (this.lastReport) {
return this.lastReport;
}
throw new Error('no report');
}
set mostRecentReport(value: string) {
this.addReport(value);
}
constructor(id: string, public reports: string[]) {
super(id, 'Accounting');
this.lastReport = reports[0];
}
addReport(text: string) {
this.reports.push(text);
this.lastReport = text;
}
printReports() {
console.log(this.reports);
}
}
const accounting = new ITDepartment('1', ['yu']);
accounting.describe();
const account = new AccountingDepartment('2', []);
account.addReport('test error');
console.log(account.mostRecentReport);
account.mostRecentReport = 'hi';
account.addReport('error');
account.printReports();
console.log(account);
// const accountingCopy = { name: 's', describe: accounting.describe };
// accountingCopy.describe();
필드값의 default는 public
외부에서도 접근 가능하게 하려면 public
해당 클래스 내부에서만 접근하려면 private
해당 클래스를 포함하여 상속받는 자식 클래스에서도 접근하게 하려면 protected
readonly 속성을 이용하면 변경이 불가능하다. (id같은 값)
extends를 이용하여 클래스를 상속받을 수 있다.
constructor 내부에 super를 사용해야 한다.
this는 super 이후에 참조 가능.
getter, setter (사용하는 방식 주의)
get을 호출할 때는 괄호를 붙이지 않음
set을 호출할때는 = 방식으로
'개발 > TypeScript' 카테고리의 다른 글
[TypeScript] interface vs type alias에 대한 개인적인 생각 (0) | 2023.11.14 |
---|---|
[TypeScript] tsconfig.json 이해하기 (0) | 2023.08.26 |
[TypeScript] 매일매일 #3 (0) | 2022.03.17 |
[TypeScript] 매일매일 #2 (0) | 2022.03.16 |
[TypeScript] 매일매일 #1 (0) | 2022.03.16 |