[[toc]]
Medium , #infer , #built-in
實現 TS 內置的 ReturnType<T> ,但不可以使用它。
答案
Medium , #union , #built-in
不使用 Omit 實現 TypeScript 的 Omit<T, K> 泛型。
Omit 會創建壹個省略 K 中字段的 T 對象。
答案
Medium , #readonly , #object-keys
實現壹個通用 MyReadonly2<T, K> ,它帶有兩種類型的參數 T 和 K 。
K 指定應設置為Readonly的 T 的屬性集。如果未提供 K ,則應使所有屬性都變為只讀,就像普通的 Readonly<T> 壹樣。
答案
Medium , #readonly , #object-keys , #deep
實現壹個通用的 DeepReadonly<T> ,它將對象的每個參數及其子對象遞歸地設為只讀。
您可以假設在此挑戰中我們僅處理對象。數組,函數,類等都無需考慮。但是,您仍然可以通過覆蓋盡可能多的不同案例來挑戰自己。
答案
Medium , #infer , #tuple , #union
實現泛型 TupleToUnion<T> ,它返回元組所有值的合集。
答案
Medium , #application
在 JavaScript 中我們很常會使用可串聯(Chainable/Pipeline)的函數構造壹個對象,但在 TypeScript 中,妳能合理的給他附上類型嗎?
在這個挑戰中,妳可以使用任意妳喜歡的方式實現這個類型 - Interface, Type 或 Class 都行。妳需要提供兩個函數 option(key, value) 和 get() 。在 option 中妳需要使用提供的 key 和 value 擴展當前的對象類型,通過 get 獲取最終結果。
妳只需要在類型層面實現這個功能 - 不需要實現任何 TS/JS 的實際邏輯。
妳可以假設 key 只接受字符串而 value 接受任何類型,妳只需要暴露它傳遞的類型而不需要進行任何處理。同樣的 key 只會被使用壹次。
答案
Medium , #array
實現壹個通用 Last<T> ,它接受壹個數組 T 並返回其最後壹個元素的類型。
答案
Medium , #array
實現壹個通用 Pop<T> ,它接受壹個數組 T 並返回壹個沒有最後壹個元素的數組。
額外 :同樣,您也可以實現 Shift , Push 和 Unshift 嗎?
答案
Medium , #array , #built-in
鍵入函數 PromiseAll ,它接受PromiseLike對象數組,返回值應為 Promise<T> ,其中 T 是解析的結果數組。
答案
Medium , #union , `#map
有時,您可能希望根據某個屬性在聯合類型中查找類型。
在此挑戰中,我們想通過在聯合類型 Cat | Dog 中搜索公*** type 字段來獲取相應的類型。換句話說,在以下示例中,我們期望 LookUp<Dog | Cat, 'dog'> 獲得 Dog , LookUp<Dog | Cat, 'cat'> 獲得 Cat 。
答案
Medium , #template-literal
實現 TrimLeft<T> ,它接收確定的字符串類型並返回壹個新的字符串,其中新返回的字符串刪除了原字符串開頭的空白字符串。
答案
Medium , #template-literal
實現 Trim<T> ,它是壹個字符串類型,並返回壹個新字符串,其中兩端的空白符都已被刪除。
答案
Medium , #template-literal
實現 Capitalize<T> 它將字符串的第壹個字母轉換為大寫,其余字母保持原樣。
答案
Medium , #template-iteral
實現 Replace<S, From, To> 將字符串 S 中的第壹個子字符串 From 替換為 To 。
答案
Medium , #template-literal
實現 ReplaceAll<S, From, To> 將壹個字符串 S 中的所有子字符串 From 替換為 To 。
答案
Medium , #arguments
實現壹個泛型 AppendArgument<Fn, A> ,對於給定的函數類型 Fn ,以及壹個任意類型 A ,返回壹個新的函數 G 。 G 擁有 Fn 的所有參數並在末尾追加類型為 A 的參數。
答案
Medium , #union
實現聯合類型的全排列,將聯合類型轉換成所有可能的全排列數組的聯合類型。
答案
/type-challenges/type-challenges/issues/614
Note
Medium , #template-literal
計算字符串的長度,類似於 String#length 。
答案
Medium , #array
在這個挑戰中,妳需要寫壹個接受數組的類型,並且返回扁平化的數組類型。
答案
Medium , #object-keys
實現壹個為接口添加壹個新字段的類型。該類型接收三個參數,返回帶有新字段的接口類型。
答案
Medium , #math , #template-literal
實現壹個接收string,number或bigInt類型參數的 Absolute 類型,返回壹個正數字符串。
答案
Medium , #union , #string
實現壹個將接收到的String參數轉換為壹個字母Union的類型。
答案
Medium , #object
實現聯合類型的全排列,將聯合類型轉換成所有可能的全排列數組的聯合類型。
答案
Medium , #
FooBarBaz -> foo-bar-baz
答案
Medium , #object
獲取兩個接口類型中的差值屬性。
答案
Medium , #array
在類型系統中實現類似於 Python 中 any 函數。類型接收壹個數組,如果數組中任壹個元素為真,則返回 true ,否則返回 false 。如果數組為空,返回 false 。
答案
Medium , #union , #utils
實現 IsNever 類型, 解析輸入 T 類型為 never 返回 true 否則 返回 false
答案
Medium , #union , #utils
實現 IsUnion 類型, 解析輸入 T 類型為聯合類型 返回 true 否則 返回 false
答案
Medium
實現 ReplaceKeys 類型, 它將替換聯合類型中類型的鍵值, 如果該類型沒有這個Key則跳過,如果有則替換。
答案
Medium
從對象類型中排除索引簽名。
答案
/type-challenges/type-challenges/issues/3542
Medium
實現類型 PercentageParser。根據規則 /^(\+|\-)?(\d*)?(\%)?$/ 匹配類型 T。
匹配的結果由三部分組成,分別是:[ 正負號 , 數字 , 單位 ],如果沒有匹配,則默認是空字符串。
答案
Medium
從字符串中剔除指定字符。
答案
Medium , Math
給定壹個正整數作為類型的參數,要求返回的類型是該數字減 1。
答案
Medium , object
從 F 中選出類型相同的屬性
答案
Medium , #object
保留沒有在U中指定的類型的字段
答案
Medium , #template-literal
實現 StartsWith<T, U> ,接收兩個string類型參數,然後判斷 T 是否以 U 開頭,根據結果返回 true 或 false
答案
Medium , #object
實現壹個通用的 PartialByKeys<T, K> ,它接收兩個類型參數 T 和 K 。
K 指定應設置為可選的 T 的屬性集。當沒有提供 K 時,它就和普通的 Partial<T> 壹樣使所有屬性都是可選的。
答案
Medium , #object
實現壹個通用的 RequiredByKeys<T, K> ,它接收兩個類型參數 T 和 K 。
K 指定應設為必選的 T 的屬性集。當沒有提供 K 時,它就和普通的 Required<T> 壹樣使所有的屬性成為必選的。
答案
Medium , #readonly , object-keys
實現壹個通用的類型 Mutable<T> ,使類型 T 的全部屬性可變(非只讀)。
答案
Medium , #object
1
答案
Medium
給定只包含字符串的元組,和類型U, 遞歸構建對象
答案
Medium , #tuple
實現類型版本的數組反轉 Array.reverse
答案
Medium , #arguments
實現類型版本的 lodash _.flip 函數
類型 FlipArguments<T> 需要函數 T 並返回壹個新的函數類型。這個函數類型擁有相同的參數,但參數類型是被反轉的。
答案
Medium , #array
按深度遞歸展平陣列。
答案
Medium
塊、元素、修飾符方法 (BEM) 是 CSS 中類的流行命名約定。例如,塊組件將表示為 btn ,依賴於塊的元素將表示為 btn__price ,改變塊樣式的修飾符將表示為 btn--big 或 btn__price--warning 。實現 BEM<B, E, M> 從這三個參數生成字符串聯合。其中 B 是字符串文字,E 和 M 是字符串數組(可以為空)。
答案
Medium , #object
實現二叉樹中序遍歷的類型版本。
答案
Medium
實現類型 just-flip-object :
答案
Medium
實現泛型 Fibonacci<T> 傳入數字 T 返回正確的 Fibonacci number .
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
答案
Medium
實現類型 AllCombinations<S> 返回所有字符組合.
答案
Medium , #array
實現類型 GreaterThan<T, U> 來比較大小,就像 T > U 。不需要考慮負數
1
答案
Medium , #tuple
實現 Zip<T, U> 類型。 T, U 必須為 Tuple
答案
Medium , #tuple
實現 IsTuple , 接收類型 T 判斷 T 是否為元組類型
答案
Medium , #tuple
實現 Chunk<T, N> , 它有兩個必填的類型參數, T 必須為 tuple , N 必須為大於1的數字
答案
Medium , tuple
Fill , 壹個常用的 JavaScript 函數, 我們用類型實現它. Fill<T, N, Start?, End?> , 它接收4個類型參數, T , N 是必填參數 T 為元組, N 為 any, Start , End 是可選參數,為大於零的數子.
為了模擬真實的功能,測試中可能會包含壹些邊界條件,希望大家喜歡:)
答案
Medium
實現 TrimRight<T> 它采用精確的字符串類型並返回壹個刪除了空格結尾的新字符串。
答案
Medium , #union , #array
實現壹個像 Lodash.without 函數壹樣的泛型 Without<T, U>,它接收數組類型的 T 和數字或數組類型的 U 為參數,會返回壹個去除 U 中元素的數組 T。
答案
Medium , template-literal
實現類型版本的 Math.trunc . 它接受字符串或數字返回整數部分,提出小數部分
答案
Medium , #array
實現類型版本的 Array.indexOf<T, U> , 它接收數組T 和 U 返回U在T中的索引值
答案
Medium , #array
實現類型版 Array.join<T, U> 接收數組T和字符串或數字 U
答案
Medium , #array
實現類型版本的 Array.lastIndexOf<T, U> , 它接收數組T 和 U 返回U在T中的反向索引值
答案
Medium , #array
實現類型版本的 Lodash.uniq , 它接收數組T,返回去重後的T
答案
Medium
實現 MapTypes<T, R> 它將對象 T 中的類型轉換為類型 R 定義的不同類型,類型 R 具有以下結構。
答案
Medium , #tuple
構造壹個給定長度的元組
答案
Medium
有時我們想限制數字的範圍......例如。
答案
Medium , #array , #application , #string
給定壹個字符串數組,進行置換和組合。它對於像video controlsList這樣的類型也很有用
答案
Medium , #union
給定壹個唯壹元素數組,返回所有可能的子序列。
子序列是壹個序列,可以通過刪除壹些元素或不刪除任何元素而從數組中派生,而不改變其余元素的順序。
答案