TypeScript를 사용하여 자체 고차 함수 구현
9172 단어 typescriptfundamentals
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 기술을 강화하기 위해 연습용으로 만들었습니다. 이미 언어에 내장된 메소드 구현을 사용하도록 권장하지 않습니다. 이들은 잘 최적화되고 독단적이므로 언어 기반 원칙과 도구를 고수합시다.
Reference
이 문제에 관하여(TypeScript를 사용하여 자체 고차 함수 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/icelandico/own-higher-order-functions-implementation-using-typescript-1pco텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)