type-challenges
なんか少なくない?
内容が古くなっている
解説とか
斜線しているやつは、余裕だったものmrsekut.icon
試したときのversion書いておいたほうが良いかもね
code:ts
export {};
// prettier-ignore
type Equal<X, Y> =
(<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2)
? true
: false;
export type Expect<T extends true> = T;
export type MergeIntersections<T> =
T extends object
: T
export type Alike<X, Y> = Equal<MergeIntersections<X>, MergeIntersections<Y>>
/***
*
*
*
*
*
*
*/
お試し
13・Hello World
初級
4・Pick 2
7・Readonly
11・Tuple to Object 2
14・First of Array 2
別解がめっちゃある、少なくとも5種類はある
18・Length of Tuple 2
43・Exclude 2
189・Awaited
268・If
533・Concat
直感的
898・Includes 2
良い回答2つ
3057・Push
3060・Unshift
3312・Parameters
2を書いてるやつは久々に2周目したらできたやつmrsekut.icon
1回目の感想に「わからなかった...」とか書いてたやつが割とサクッと解けた
中級
2・Get Return Type
スクボ見たらできた (もちろんOmitのページではない)
できたけど復讐したい
objectとかの条件分岐
後から別のタイミングで見たメモ↓
言われてみればextends neverって謎だな
10・Tuple to Union
ちょっとつまったけどできた。これは楽しい
答えのメモ
15・Last of Array
16・Pop
20・Promise.all
けっこう頑張ったが、わからなかった
答えのメモ
62・Type Lookup
割とすぐできた
おもろいので復習
答えのメモ
これと同じ解答だった
106・Trim Left
まったくわからんかった
ヒント
1 . Template Literal Typesを使う
2 . 再帰する
108・Trim
Trim Leftとほぼ同じだが、ちょっとだけ工夫できる
自分が書いた解答はこれ
leftとrightを逐次的にやっているだけであまり面白みがない
ditributeを使うと、1回の条件分岐で行ける
110・Capitalize
116・Replace
わからんかった
ヒント
意外と単純
再帰すら不要
答え
119・ReplaceAll
116 Replaceの上位互換
116 Replaceより難しいけど、116 Replaceができるならできる
191・Append Argument
できたが、もっかいやっておこう
296・Permutation
まったくわからない
ヒント
型引数は2つ
再帰する
解答
459・Flatten
解けない場合は、先に「599 Merge」をやると良い
529・Absolute
531・String to Union
610・CamelCase
結構簡潔に書ける
なくなった?
612・KebabCase
未
CamelCaseとたぶん同じなのでいったんスルー
645・Diff
949・AnyOf
できたけど、冗長すぎた
2行ぐらいで書ける
むっず〜〜〜
ヒント
U exntends U
U[] extends T[]
1130・ReplaceKeys
1367・Remove Index Signature
わからなかった
ヒント
recordからrecordへのmap(filter)
stringでもnumberでもない
1978・Percentage Parser
できたが冗長だった
ヒント
答えも含めて3つの型を定義した
2070・Drop Char
2257・MinusOne 2595
効率の面で無理だった
2595・PickByType
できたが冗長すぎた
1つのextendsで書ける
2693・EndsWith
2759・RequiredByKeys
2793・Mutable
余裕すぎ
2852・OmitByType
2946・ObjectEntries
3062・Shift
3188・Tuple to Nested Object
3192・Reverse
3196・Flip Arguments
3243・FlattenDepth
3326・BEM style string
3376・InorderTraversal
4179・Flip
4182・Fibonacci Sequence
4260・文字の組み合わせ
4425・Greater Than
4471・Zip
全条件を書けば簡単だが、短く書ける方法も一応ある
T['length']を使う
T['length']を使って、配列とタプルの違いを考える
4499・Chunk
4518・Fill
4803・Trim Right
Trim Leftと同じ
5117・Without
5140・Trunc
5153・IndexOf
5310・Join
5317・LastIndexOf
5360・Unique
5821・MapTypes
7544・Construct Tuple
8640・Number Range
8767・Combination
8987・Subsequence
9142・CheckRepeatedChars
9286・FirstUniqueCharIndex
9896・GetMiddleElement
9898・Appear only once
10969・Integer
16259・ToPrimitive
17973・DeepMutable
18142・All
18220・Filter
21106・Combination key type
25170・Replace First
25270・Transpose
26401・JSON Schema to TypeScript
27133・Square
上級
6・Simple Vue
17・Currying 1
これは関数の実装なんだ
関連のメモ
55・Union to Intersection
57・Get Required
59・Get Optional
89・Required Keys
90・Optional Keys
112・Capitalize Words
114・CamelCase
147・C-printf Parser
213・Vue Basic Props
223・IsAny
270・Typed Get
300・String to Number
399・Tuple Filter
472・Tuple to Enum Object
545・printf
553・Deep object to unique
651・Length of String 2
730・Union to Tuple
847・String Join
956・DeepPick
1290・Pinia
1383・Camelize
2059・Drop String
2822・Split
2828・ClassPublicKeys
2857・IsRequiredKey
2949・ObjectFromEntries
4037・IsPalindrome
5181・Mutable Keys
5423・Intersection
6141・Binary to Decimal
7258・Object Key Paths
8804・Two Sum
9155・ValidDate
9160・Assign
9384・Maximum
9775・Capitalize Nest Object Keys
13580・Replace Union
14080・FizzBuzz
14188・Run-length encoding
15260・Tree path array
19458・SnakeCase
25747・IsNegativeNumber
最上級
5・Get Readonly Keys
151・Query String Parser
216・Slice
274・Integers Comparator
462・Currying 2
476・Sum
517・Multiply
697・Tag
734・Inclusive Range
741・Sort
869・DistributeUnions
925・Assert Array Index
6228・JSON Parser
7561・Subtract