제네릭스는 타입스크립트에서 함수 클래스 인터페이스 Alais를 사용하게 될 때, 호환을 맞춰야 할 때 사용하는 문법입니다.
Interface 사용 방법
merge 함수에 인자에는 무슨 값이 들어오는지 모르는데 Type을 어떻게 해야될까요?
function merge(a, b) { return { ...a, ...b } }
any를 사용하여 타이블 지정할 수 있으나, merge. ~ 하고 안에 있는 값을 확인 할 수 없습니다.
function merge(a: any, b: any) { return { ...a, ...b } }
하지만 generics를 사용하면 안에 있는 값을 조회할 수 있습니다.
function merge<T1, T2>(a: T1, b: T2) { return { ...a, ...b } } const merged = merge({ me : 1}, { you : 2 }); console.log(merged) //{ me : 1 , you : 2 } console.log(merged.me) // 1
Interface를 사용한 Generic의 경우
interface Items<T> { list: T[]; } // generic으로 String을 넣었기 때문에 list의 값은 스트링이어야 한다. const items: Items<string> = { list: ['a','b'] }
Type Alias를 사용한 Generic의 경우
type Items<T, V> = { list: T[]; value: V; } // generic으로 String을 넣었기 때문에 list의 값은 스트링이어야 한다. const items: Items<string, string> = { list: ['a','b'], value: 'a' }