TypeScript를 사용하여 자체 고차 함수 구현

JavaScript는 대부분 함수에 관한 것입니다. 우리는:
1) 변수에 할당하고,
2) 다른 함수에 대한 인수로 사용,
3) 함수에서 함수를 반환합니다.

고차 함수는 2번 또는 3번 항목에 적용되는 함수입니다.
이 게시물에서는 TypeScript를 사용하여 일부 내장 언어 고차 함수의 자체 버전을 구현한 방법을 보여주고자 합니다.
이 게시물에서는 Array.prototype.reduce를 다루지 않았습니다. 바라건대, 나는 이것을 곧 시행할 것이다.

상호 작용



먼저 메서드 구현을 위한 구조를 설정하는 인터페이스를 만듭니다. 여기서는 typescript generics을 사용합니다. 배열은 다양한 유형의 항목으로 구성될 수 있으며 제네릭은 이러한 상황에 대한 좋은 솔루션입니다. 덕분에 이 구현을 더 재사용할 수 있습니다. 전달된 배열 유형에 대한 정보도 잃지 않습니다.

 interface Array<T> {
    myForeach(cb: (element: T, index: number, arr: T[]) => void): undefined;
    myFilter(cb: (element: T, index: number, arr: T[]) => boolean): T[];
    myMap(cb: (element: T, index: number, arr: T[]) => T): T[];
}


각각



Array.prototype.forEach부터 시작하겠습니다. 이 메서드는 제공된 배열의 각 요소에 대해 한 번씩 콜백을 실행합니다.
여기 내 버전이 있습니다. JavaScript에서 우리가 알고 있는 다른 고차 함수와 같이 이 메서드는 배열을 반환하지 않기 때문에 반환된 값은 정의되지 않습니다.

 Array.prototype.myForeach = function<Each>(callback: (element: Each, index: number, arr: Each[]) => void): undefined {
    for (let i = 0; i < this.length; i++) {
        callback(this[i], i, this);
    }
    return undefined
}


지도



여기서 우리는 전달된 것뿐만 아니라 반환된 (ChangedMapElem) 배열에 대한 유형을 설정해야 합니다.

 Array.prototype.myMap = function<MapElem, ChangedMapElem>(callback: (element: MapElem, index: number, arr: MapElem[]) => ChangedMapElem): ChangedMapElem[] {
    let mapped = [];
    for (let i = 0; i < this.length; i++) {
        mapped.push(callback(this[i], i, this))
    }

    return mapped;
}


필터




 Array.prototype.myFilter = function<FilterElem>(callback: (element: FilterElem, index: number, arr: FilterElem[]) => boolean): FilterElem[] {
    let filtered = [];
    for (let i = 0; i < this.length; i++) {
        if (callback(this[i], i, this)) filtered.push(this[i]);
    }

    return filtered;
}


그게 다야. JavaScript/TypeScript 기술을 강화하기 위해 연습용으로 만들었습니다. 이미 언어에 내장된 메소드 구현을 사용하도록 권장하지 않습니다. 이들은 잘 최적화되고 독단적이므로 언어 ​​기반 원칙과 도구를 고수합시다.

좋은 웹페이지 즐겨찾기