일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 크롤링
- 소켓
- HTTP
- ip
- 프로그래머스 레벨 2
- 쉬운 문제
- Node.js
- 가천대
- socket
- BFS
- 레벨 1
- 문자열
- 자바스크립트
- Algorithm
- 수학
- dfs
- HTTP 완벽 가이드
- Crawling
- 타입 챌린지
- typescript
- javascript
- 프로그래머스
- TCP
- 백준
- 타입스크립트
- Nestjs
- type challenge
- 알고리즘
- 그래프
- dp
- Today
- Total
목록프로그래밍/TypeScript (65)
kakasoo
type Fill = T extends [infer H, ...infer R] ? [...L, 0][Start] extends undefined ? Fill : [...L, 0][End] extends undefined ? Fill : Fill : L 위처럼 프로퍼티가 하나 추가된 상황만을 생각해보자. type Fill< T extends unknown[], N, Start extends number = 0, End extends number = T['leng..
type Length = T['length']; type Push = [...T, P]; type NTuple = Length extends N ? T : NTuple; type Add = Length; 이렇게 4개는 타입 챌린지를 풀다 보면 많이들 쓰게 되는 타입들이다. Length는 사실 제네릭 T[’length’]의 접근을 축약한 것이기 때문에 크게 어렵지 않을 것이다. Push는 Tuple T를 받아 P를 담은 새 튜플로 추론되는 타입이다. NTuple은 튜플 T가 N만큼의 크기가 될 때까지 재귀적으로 Push하는 타입이다. Add는 N1, N2를 그 크기만큼의 튜플로 만든 다음, 그 튜플을 합쳐 다시 Length를 구하는 방식으로 두 수의 합을 구하는 타입이다. 이 네 가지 타입이 자주 쓰이는 ..
type Split = T extends `${infer FirstLetter}${infer Rest}` ? [FirstLetter, ...Split] : []; type StringLength = Split['length']; type Push = [...T, P]; type NTuple = P['length'] extends N ? P : NTuple; type Add = [...NTuple, ...NTuple]['length']; type ToNumber = T extends number ? T : never; type RemoveFirstLetter = T extends `${infer F}${infer Rest}` ? Rest : ''; type FindAll = P extends '' ? []..
최초의 풀이와 오답 type Int = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0'; type February = '02' type MonthsHasDays30 = '04' | '06' | '09' | '11'; type MonthsHasDays31 = '01' | '03' | '05' | '07' | '08' | '10' | '12'; type Months = February | MonthsHasDays30 | MonthsHasDays31; type Days = Exclude type DaysByMonth = T extends February ? Exclude : T extends MonthsHasDays30 ? Exclude : Days ty..
type GetMiddleElement = T extends [] ? [] : T extends [infer Last] ? T : T extends [infer First, infer Last] ? T : T extends [infer First, ...infer Middles extends any[], infer Last] ? GetMiddleElement : never;
이 정도는 가뿐했다. // your answers type Shift = T extends [infer F, ...infer Rest] ? Rest : never; declare function Currying(fn: T): T extends (...params: infer Params) => infer R ? Params['length'] extends 0 ? () => ReturnType : Params['length'] extends 1 ? (p: Params[0]) => ReturnType : (p: Params[0]) => ReturnType> : never;
type SingletonizeMethod, ExcludeKeys extends keyof T> = { [key in keyof T as key extends ExcludeKeys ? never : key]: T[key] } type OmittedExcute = SingletonizeMethod; class A { execute () : OmittedExcute { return new A(); } additional () : T extends true ? OmittedExcute : A { return new A(); } }
type SnakeToCamelCaseObject = { [K in keyof T as SnakeToCamel]: T[K] extends object ? SnakeToCamelCaseObject : T[K]; }; const c: SnakeToCamelCaseObject = { aB: { cD: { eF: { gH: true, }, }, }, iJ: false, }; 카멜케이스 타입을 재귀적으로 돌게 하면 위와 같이 스네이크 케이스로 만들어진 타입을 재귀적으로 카멜 케이스가 되게 수정할 수 있다. 컨벤션을 일괄적으로 변경하기에 용이하다. 문자열을 카멜케이스로 변경하는 타입은 아래에서 확인할 수 있다. SnakeCase에서 CamelCase로 리터럴 타입 추론하기 type SnakeToCamel< Targ..
type SnakeToCamel = Join; 타입 파라미터 Target을 받는다. 이 타입 Target을 _ 문자를 기준으로 Split하면 문자열이 배열의 형태가 되는데, 이를 일단 P에 저장한다. 이제 이 문자열 배열 P를 mapped type을 이용하여 첫번째 문자를 제외한 나머지 문자열들은 첫글자만 대문자로 변경한다. 이렇게 만들어진 문자열 배열을 다시 하나의 문자열이 되게 Join한다. 타입 레벨에서 문자열 Join 구현하기 type ToString= T extends string ? T : never; type ToStringTuple= T extends string[] ? T : never; typ..
type FirstLetterCapitalize = Target extends `${infer F}${infer Rest}` ? `${Uppercase}${Rest}` : Target; 문자열의 첫 글자만을 대문자로 변경하는 타입이다.
type Split = Target extends `${infer F}${Separator}${infer Rest}` ? [F, ...Split] : Target extends "" ? [] : [Target]; Join과 반대로 문자열을 분리하는 타입. Target이 Separator를 기준으로 F와 Rest로 나뉠 수 있는 문자열일 경우 이 둘을 잘라 배열에 담는 타입이다. Join 타입은 아래 링크들에서 확인할 수 있다. https://kscodebase.tistory.com/682 타입 레벨에서 문자열 Join 구현하기 type ToString= T extends string ? T : never;..
https://kscodebase.tistory.com/682 타입 레벨에서 문자열 Join 구현하기 type ToString= T extends string ? T : never; type ToStringTuple= T extends string[] ? T : never; type Join = T extends [infer F, ...infer Rest] ? `${ToString}${Join}` : ''; 문자열로 이루어진 배열을 받아 Join하는 타입을 구현했다. type kscodebase.tistory.com Join의 다른 구현 방법 type Join = Target extends [infer..