์ฐ์ ์ด ๊ธ์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ํ ๋๋ก ํ์์์ ๋ฐํ๋๋ค.
์ข์ ๊ธ ์จ์ฃผ์ DailyEngineer๋ ๊ฐ์ฌํฉ๋๋ค.
https://hyunseob.github.io/2017/01/14/typescript-generic/
function getFirst<T extends Stack<U>, U>(container: T): U {
const item = container.pop();
container.push(item);
return item;
}
'a'
์ 1
์ฒ๋ผ ๋ค๋ฅธ ์๋ฃํ์ ์ธ์๋ฅผ ์์ด ๋ฐ๊ณ ์ถ์ง ์์ ๋๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?any
ํ์ผ๋ก ๋ฐ์๋ ์ข์ง๋ง, ๊ทธ๋ฌ๋ฉด ๋ ๋ชจ๋๋ฅผ ๋ฐ๊ฒ ๋์ง ๋ ์ค ํ๋๋ก๋ง ํํฐ๋งํด์ ๋ฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.any
๋ก ํ๋ฉด vscode์ ๊ฐ์ ์๋ํฐ์์ ์๋์์ฑ ๊ธฐ๋ฅ์ ํตํ method
๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.DailyEngineer
๋์ ๋ธ๋ก๊ทธ์ ์๋ ์์ ๋ฅผ ๊ฐ์ด ์ดํด๋ณด์
class Stack<T> {
private data: T[] = [];
constructor() {}
push(item: T): void {
this.data.push(item);
}
pop(): T {
return this.data.pop();
}
}
const numberStack = new Stack<number>();
const stringStack = new Stack<string>();
numberStack.push(1);
stringStack.push('a');
T
๋ ์์ฑ์๊ฐ ์์๋ก ์ง์ ํ ์ ์๋ ๋ณ์๋ช
์ด๋ค.T
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ๋ค.T,U,V,W,X,Y,Z
T
๋ฅผ ์ด ์ดํ์๋ ์ํ๋ฒณ ์์์ ๋ง์ถฐ ๊ทธ ๋ค์ ๊ฒ๋ค์ ์ฐ๋ฉด ๋๋ค.i, j, z
๋ฅผ ์ฐ๋ ๊ฒ๊ณผ ๊ฐ๋ค.function first<T>(arr: T[]): T {
return arr[0];
}
first<number>([1, 2, 3]); // ํจ์์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
function toPair<T, U>(a: T, b: U): [ T, U ] {
return [ a, b ];
}; // ๋ ๊ฐ์ง ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
function getFirst<T extends Stack<U>, U>(container: T): U {
const item = container.pop();
container.push(item);
return item;
};
getFirst<Stack<number>, number)(numberStack); // ์์๋ ํ์
๋ณ์