728x90
Type Script 제너릭타입(Generic types)
📌 제너릭이란?
선언 시점이 아닌 생성 시점에 타입을 명시하여
하나의 타입만이 아닌 다양한 타입을 사용할 수 있도록 하는 기법
전달받은 타입을 확인 및 반환을 할 수 있고 타입을 제한 할 수도 있습니다.
📌 배열 선언
📌 제너릭을 굳이 사용하는 이유는?
제네릭을 선언할 때 관용적으로 사용되는 대표적인 식별자로 T가 있고, 그 외에 U와 V가 있습니다. 반드시 T, U, V를 사용하여 하는 것은 아니지만 관용적인 식별자를 쓰는게 모범적입니다.
📄 index.ts
interface MyInterface {
value: string | number | string[];
}
const stringObject: MyInterface = { value: "hello world!" };
const numberObject: MyInterface = { value: 1234 };
const stringArrayObject: MyInterface = { value: ["hello", "world!"] };
// --- 유연한 타입
interface MyInterfaceG<T> {
value: T;
}
const stringObjectG: MyInterfaceG<string> = { value: "hello world!" };
const numberObjectG: MyInterfaceG<number> = { value: 1234 };
const stringArrayObjectG: MyInterfaceG<string[]> = {
value: ["hello", "world!"],
};
타입의 프로퍼티를 보다 유연하게 타입을 입힐 수 있어 사용한다.
📄 기초값 지정
interface MyInterfaceG<T = string> {
value: T;
}
const stringObjectG: MyInterfaceG = { value: "hello world!" };
const numberObjectG: MyInterfaceG = { value: 1234 }; // error
const stringArrayObjectG: MyInterfaceG<string[]> = {
value: ["hello", "world!"],
};
📄 함수 - 기본 구조
type User = {
email: string;
name: string;
};
function getData<T>(data: T):T {
return data;
}
console.log(getData<string>("string data"));
console.log(getData<number>(1234));
console.log(getData<User>({ email: "email@email.com", name: "katie" }));
console.log(getData<string[]>(["string", "data"]));
console.log(getData<string[]>([]));
📄 함수 - values
enum Status {
Initiated = "Initiated",
Pending = "Pending",
Shipped = "Shipped",
Delivered = "Delivered",
}
interface Order {
buyer: string;
orderStatus: Status;
}
const orders: Order[] = Object.values(Status).map((status, index) => {
return {
buyer: `buyer #${index}`,
orderStatus: status,
};
});
📄 class
// public, private, protected
// public => 제한 없음, 누구나 access 가능
// private => 특정 class 안에서만 access 가능
// protected => 특정 class 안에서 access 가능, 상속받는 class 안에서 access 가능
class Base {
first = "";
public second = "";
protected third = "";
private fourth = "";
baseFunction() {
this.fourth;
}
}
class Inherited extends Base {
myFunction() {
this.first;
this.second;
this.third;
// this.fouth; // 에러
}
}
const inherited = new Inherited();
inherited.first;
inherited.second;
// inherited.third; // 에러
// inherited.fourth; // 에러
📄 stack class
interface IStack<T> {
push(item: T): void;
pop(): T | undefined;
peek(): T | undefined;
size(): number;
}
class Stack<T> implements IStack<T> {
private storage: T[] =[];
constructor(private capacity = 4) {}
push(item: T): void {
if (this.size() === this.capacity) {
throw Error("stack is full!");
}
this.storage.push(item);
}
pop(): T | undefined {
return this.storage.pop(); // Array<T>.pop();
}
peek(): T | undefined {
return this.storage[this.size() - 1];
}
size(): number {
return this.storage.length;
}
}
const stringStack = new Stack<string>();
stringStack.push("hello");
stringStack.push("world");
stringStack.push("!");
stringStack.push("!");
// stringStack.push("!"); // Error: stack is full!
console.log(stringStack.peek());
'JavaScript' 카테고리의 다른 글
TS, 기본적인 CRUD (0) | 2023.01.30 |
---|---|
TS Utility Types (0) | 2023.01.27 |
Type Script 열거형(Enums) (0) | 2023.01.26 |
TS, 내가 만든 포켓몬 크롤링 프로그램 (0) | 2023.01.19 |
후발대_node.js 숙력주차 과제 복습 (0) | 2023.01.19 |