
클래스
- 메서드의 매개변수와 리턴 타입을 지정
- 클래스 속성(멤버변수)을 추가하고 타입 지정
implements
키워드 사용, 인스턴스의 타입 지정
class HighSchool implements IHighSchool {
kor: number;
eng: number;
constructor(kor: number, eng: number) {
this.kor = kor;
this.eng = eng;
}
sum() {
return this.kor + this.eng;
}
avg() {
return this.sum() / 2;
}
}
접근 지정자
public
, private
, protected
키워드 사용 가능함
- 속성이나 메서드 앞에 사용해서 접근 제한
- 자바스크립트의 private class fields 에서
#
를 사용하는 것과 동일(private)
모듈
export
: 타입 별칭, 인터페이스를 export 할 수 있음
import type
: import 구문에 type 키워드를 추가해서 type에 대한 import 를 명시
import inline type
: 일반 import 구문과 함께 type을 import
export interface DataType {
a: number;
b: number;
}
import type { DataType } from './math.js';
import { type DataType, sum } from './math.js';
제네릭
- 함수를 정의할 때 타입을 정의하지 않고, 호출하는 시점에 원하는 타입을 지정한다.
- 함수 내부의 코드는 동일하고 매개변수나 리턴 타입만 다를 경우에 사용
- 함수, 인터페이스, 클래스 정의에 사용
function echoString(msg: string): string{
return msg;
}
function echoNumber(msg: number): number{
return msg;
}
function echoBoolean(msg: boolean): boolean{
return msg;
}
console.log(echoString('hello'));
console.log(echoNumber(123));
console.log(echoBoolean(true));
function echo<T>(msg: T): T{
return msg;
}
console.log(echo<string>('hello'));
console.log(echo<number>(123));
console.log(echo<boolean>(true));
제네릭 타입 제약
- 제네릭에 전달받을 타입을 지정한 타입만 가능하도록 제한
extends
키워드 사용
- 객체의 속성 타입도 지정 가능
<T extends string | number>
<T extends { length: number }>
제네릭 클래스
interface TQueue<T extends string | number> {
data: T[];
push(item: T): void;
pop(): T | undefined;
}
class MyQueue<T extends string | number> implements TQueue<T> {
data: T[] = [];
push(item: T){
this.data.push(item);
}
pop(): T | undefined{
return this.data.shift();
}
}
const sq = new MyQueue<string>();
const nq = new MyQueue<number>();
👏