[TypeScript] 클래스, 모듈, 제네릭

뒹귤·2024년 7월 4일
0

타입스크립트

목록 보기
3/5

클래스

  • 메서드의 매개변수와 리턴 타입을 지정
  • 클래스 속성(멤버변수)을 추가하고 타입 지정
  • 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>();
profile
🌱 FE 

1개의 댓글

comment-user-thumbnail
2024년 7월 4일

👏

답글 달기

관련 채용 정보