TypeScript - Generics
14041 ワード
Generics
Genericsは、typescriptで関数、クラス、インタフェース、typealiasを使用する場合に、複数のタイプを互換化する必要がある場合に使用される構文です.
Ex 2)その他の使用状況 enqueue:Q新規登録. dequeue:Qの最初の項目.
Genericsは、typescriptで関数、クラス、インタフェース、typealiasを使用する場合に、複数のタイプを互換化する必要がある場合に使用される構文です.
<T>
というのがGenericsです.//function의 파라미터에 a,b에 들어오는 값이 정해져 있지 않는 경우 generics를 쓰게된다.
function merge (a: any, b: any) {
return{
...a,
...b,
};
}
const merged = merge({foo: 1}, {bar: 2});
// generics를 사용하면
function merge<T1, T2> (a: T1, b: T2) {
return{
...a,
...b,
};
}
const merged = merge({foo: 1}, {bar: 2});
merged./*라고 하면 안에 foo와 bar가 들어있는 것을 볼 수 있다.*/
このように汎用型を用いると,実際のパラメータに加わるタイプが類推である.Ex 2)その他の使用状況
functino wrap <T> (param: T) {
return{
param
};
}
const wrapped = wrap(10);
wrapped./*이렇게 하면 위에 wrap()안에 넣는 값에 따라 타입이 지켜지면서 어떤 형태인지 알 수 있다.*/
インタフェースやtypealiasでも使用できます.interface Items<T> {
list: T[]
};
const items: Items <string> = {
list: ['a', 'b', 'c']/*list가 위에서 string을 넣어줬기 때문에 string을 넣어줘야 한다. 즉 number을 넣어주게 되면 number를 넣어야 한다.*/
};
//typealias로 구현
type Items<T> = {
list: T[];
};
const items: Items <string> = {
list: ['a', 'b', 'c']
};
//Generics는 여러개여도 상관없다.
type Items<T, V> = {
list: T[];
value: V[];
};
const items: Items <string, number> = {
list: ['a', 'b', 'c'],
Value: [1, 2, 3]
};
Ex 4)クラスでGenericsを使用する方法class Queue<T> {
list : T[] = [];
get length() {
return this.list.length;
}
enqueue(item: T) {
this.list.push(item);
}
dequeue() {
return this.list.shift();
}
}
const queue = new Queue<number>();
queue.enqueue(0);
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
while (enqueue.length > 0) {
console.log(queue.dequeue());
}
Qはデータを登録できる資料型であり,先に登録を抽出することができる.Reference
この問題について(TypeScript - Generics), 我々は、より多くの情報をここで見つけました https://velog.io/@hey_jude/TypeScript-Genericsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol