목록전체 글 (33)
dev-hamster
Get Return Type내장 제네릭 ReturnType을 이를 사용하지 않고 구현하자리턴되는 타입을 infer U로 추론하고 U를 반환한다. 하지만 함수 인수를 받는 타입을 unknown[] 으로 하면 테스트 케이스가 일부만 통과해서 any로 변경해 모두 통과되도록 했다.// 아쉬운 정답type MyReturnType unknown> = T extends (...args:any) => infer U ? U : never;함수 인자 타입을 never[] 로 하면 모든 테스트 케이스가 통과된다.// 정답type MyReturnType unknown> = T extends (...args: never[]) => infer R ? R : neverunknown[]이 안되..
IncludesJavaScript의 Array.includes 함수를 타입 시스템에서 구현하세요. 타입은 두 인수를 받고, true 또는 false를 반환하자.U가 T의 구성 요소인지 확인하기 위해 T를 인덱스 접근 타입으로 변경하고 U가 이 유니온 타입에 속하는지 조건부로 true 또는 false를 반환한다. 그런데 이 코드는 primitive type만 통과하고 객체나 타입 자체는 통과하지 않는다. 예를 들어 { a: 'A'} 는 { }의 서브 타입으로 true를 반환한다. // 오답type Includes = U extends T[number] ? true : false;T 배열의 요소를 키로 갖는 타입을 만들고 U가 T의 키인지 확인하면 해결할 수 있을 것 같지만, U가 프로퍼티 키로 사용할 수 ..
ExcludeT에서 U에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude를 사용하지 않고 구현하는 문제이다.Exclude: Exclude 는 U에 할당할 수 있는 타입을 제외한다. 차집합으로 이해할 수 있다.분배법칙: 조건부 타입에서 분배법칙이 적용된다. 예를 들어 A | B | C extends U ? X : Y 는 A extends U ? X : Y, B extends U ? X : Y, C extends U ? X : Y 가 된다. T extends U ? X : Y 에서 T 유니언 타입은 개별 구성 요소를 확인한다.T가 U에 속한다면, never를 반환한다.type MyExclude = T extends U ? never : T;AwaitedPromise와 같은 타입에 감싸인 타입이 있..
PICK-4pick을 사용하지 않고 Pick을 구현하는 문제이다.keyof 는 객체의 키 값들을 숫자나 문자열 리터럴 유니언을 생성한다.in 는 객체에 특정 속성이 존재하는지 확인할 수 있다.K extends keyof T K는 T의 프로퍼티 이름을 가진다. 매핑된 타입을 이용하면 키를 통해 타입을 반복적으로 생성할 수 있고 인덱스 시그니처 문법으로 작성하면 된다.type MyPick = { [k in K]: T[k]}ReadonlyReadonly 타입을 사용하지 않고 구현하는 문제이다.readonly 는 프로퍼티를 읽기 전용으로 지정할 수 있다.type MyReadonly = { readonly [P in keyof T]: T[P]}Tuple to Object각 원소의 값을 key/value로 갖는..
이번 글에서는 강의를 수강하고 map, filter, reduce, go, curry를 구현해보겠다.map, filter, reduce, go, curry 구현하기mapmap은 배열을 순회하면서 함수를 실행해 새로운 배열을 생성하는 함수이다. iter를 순회하면서 콜백함수를 실행한 결과값을 result 배열에 넣어주면 된다.const map = (fn, iter) => { const result = []; for (const x of iter) { result.push(fn(x)); } return result;};filterfilter는 배열을 순회하면서 함수를 실행해 조건에 맞는 값들로 새로운 배열을 생성한다. iter를 순회하면서 콜백함수를 실행한 결과가 true 이면 result 배..