한정된 다형성으로 인수의 개수 정의하기 가변 인수 함수 (= 임의의 개수의 인수를 받는 함수)에서도 한정된 다형성을 사용할 수 있습니다. 예를 들어 JavaScript의 내장 call 함수를 직접 구현하면, 아래처럼 정의하고 사용할 수 있습니다. call은 함수 하나와 임의 개수의 인수를 받아서 이 인수들을 함수에 건네 호출하는 함수입니다. function call( f: (...args: unknown[]) => unknown, ...args: unknown[] ): unknown { return f(...args) } function fill(length: number, value: string): string[] { return Array.from({length}, () => value) } cal..
제네릭을 어디에 선언할 수 있을까? TypeScript에선 호출 시그니처를 정의하는 방법에 따라 제네릭을 추가하는 방법이 정해져 있습니다. type Filter = {(array: T[], f: (item: T) => boolean) =>T[]} // ① let filter: Filter = //... type Filter = { // ② (array: T[], f: (item:T) => boolean): T[] } let filter: Filter = // ... type Filter = (array: T[], f: (item: T) => boolean) => T[] // ③ let filter: Filter = // ... type Filter = (array: T[], f: (item: T) => ..
언제 제네릭 타입이 한정되는가? 제네릭 타입의 선언 위치에 따라 타입의 범위뿐 아니라 TypeScript가 제네릭 타입을 언제 구체 타입으로 한정하는지도 결정됩니다. type Filter = (array: T[], f: (item: T) => boolean) => T[] let filter: Filter = (array, f) => { const result = [] for(let i = 0; i < array.length; i++){ const item = array[i] if(f(item)) { result.push(item) } } return result } 위의 예시에서 를 호출 시그니처의 일부로 선언했으므로 TypeScript는 Filter 타입의 함수를 실제 호출할 때 구체 타입을 T로 한정..