일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 가천대
- 쉬운 문제
- 백준
- dp
- 자바스크립트
- HTTP
- ip
- 레벨 1
- 소켓
- javascript
- 프로그래머스 레벨 2
- Node.js
- 타입 챌린지
- dfs
- Algorithm
- BFS
- 크롤링
- 문자열
- 수학
- Nestjs
- socket
- 그래프
- Crawling
- typescript
- 프로그래머스
- 타입스크립트
- HTTP 완벽 가이드
- TCP
- 알고리즘
- type challenge
- Today
- Total
목록타입 챌린지 (20)
kakasoo
// type StringToUnion = T extends `${infer F}${infer S}` ? (F | StringToUnion) : T; type StringToUnion = T extends '' ? never : T extends `${infer F}${infer S}` ? (F | StringToUnion) : T; T가 만약 infer F와 S로 이루어진 문자열이라면 F와 나머지 문자에 대해서 StringToUnion을 재귀적으로 푼 결과를 유니온으로 받는다. 만약 그러한 문자열이 아니면 T를 받는다. 단, 문자열 T가 빈 문자열인 경우에는 해당 식은 성립하지 않기 때문에 T ( = '' ) 를 리턴하는 문제가 있다. 따라서 빈 문자를 유니온 조합에서 제거하기 위해 맨 앞에 T ext..
타입 챌린지의 문제인데, 미디움에 있었다. 끔찍한 수준의 난이도인데 이게 왜 medium인지 모르겠다. 아래에 문제를 이해하기 위해 필요한 지식과 해석 순서를 모두 기재하였으니 참고하도록 하자. 문제, 그리고 필요로 하는 결과 type cases = [ Expect, Expect, Expect, Expect, Expect, ] 분산적 조건 타입 type Singular = T extends never ? true : false; type IfAnySingular = Singular; // boolean 타입스크립트 핸드북 - 분산적 조건 타입 Documentation - Conditional Types Create types which act like if statements in the type sys..
type Split = T extends `${infer R}${infer Rest}` ? [R, ...Split] : []; type LengthOfString = Split['length']; 문자열에서의 length는 타입을 뽑아도 number로 나올 뿐, readonly 상태의 어떤 상수 값이 나오질 않는다. 따라서 배열로 변경할 필요가 있어서 일단 Split 이라는 타입을 만들고 거기서 length를 뽑도록 수정했다.
type AppendArgument any), A> = (rest:[...Parameters, A]) => ReturnType; type AppendArgument any), A> = (...rest:[...Parameters, A]) => ReturnType; 처음에는 위처럼 작성했다. 하지만 구현된 결과물을 보니 rest는 배열 형태를 타입으로 가지고 있었다. 즉, 배열을 받는 배열이지, a,b,x... 형태의 파라미터들을 각각 받는 함수가 아니었다. 그래서 전개 연산을 추가했다. a,b,x 라는 식별자 이름으로 인해서 이걸 어떻게 객체 형태로 풀어 쓰느냐 고민했지만, 생각해보니 이건 함수라서 식별자 이름은 아무래도 상관없었다. 전개 연산을 추가하니 쉽게 해결되었다.
type ReplaceAll = S extends From ? To : ( S extends `${From}${infer Rest}` ? `${To}${ReplaceAll}` : (S extends `${infer First}${From}${infer Last}` ? `${First}${To}${ReplaceAll}`: (S extends `${infer First}${From}` ? `${First}${To}` : S))); 좀 복잡해보이지만 이렇게 정의할 수 있다. S가 나올 수 있는 경우는 이미 From인 경우, 뒤에 다른 문자열 포함한 From인 경우, 앞과 뒤에 다른 문자열을 포함한 From인 경우, 그리고 앞에만 다른 문자열을 포함한 From인 경우, From이 포함되지 않은 경우, 이렇게 5..
// type Replace = S extends `${infer R}${From}${infer T}` ? `${R}${To}${T}` : S type Replace = From extends '' ? S : S extends `${infer R}${From}${infer T}` ? `${R}${To}${T}` : S; 처음에 정의한 타입으로는 From이 빈 문자일 경우에 제대로 동작하지 않았다. 그래서 Replace에는 From이 빈 문자일 경우에는 그대로 S를 리턴하도록 하는 구문을 추가했다. 이 타입은 `${infer R}${From}${infer T}`로 구성된 타입에서 From을 To로 바꾸는 타입이다. 굳이 T를 붙인 이유는, 이 타입의 초기 문자열 S가 'foobarbar'와 같이 동일한 단..
type TrimLeft = S extends `${infer R}${infer Rest}` ? R extends ' ' | '\n' | '\t' ? TrimLeft : S : ''; string이 `${infer R}${infer Rest}` 일 때, R은 첫번째 글자가 되고 Rest는 나머지 모든 글자가 된다. 따라서 R이 빈 문자일 경우에는 Rest를 다시 재귀적으로 TrimLeft로 호출해주면 된다. R이 빈 문자가 아닐 경우에는 TrimLeft할 게 없으니 종료 시점으로 보고 S를 리턴하면 된다. 만약 string이 `${infer R}${infer Rest}`의 형식이 아닐 경우는 빈 문자이기 때문에 빈 문자를 리턴하면 된다.
GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge Collection of TypeScript type challenges with online judge - GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge github.com Implement a generic MyReadonly2 which takes two type argument T and K. K specify the set of properties of T that should set ..