Coleção de desafios de tipo em TypeScript
English | 简体中文 | 日本語 | 한국어 | Português
pelo poder do conhecido sistema de tipos Turing Completed do TypeScript
Tipos de alta qualidade podem ajudar a melhorar a capacidade de manutenção dos projetos, evitando possíveis bugs.
Existem várias bibliotecas incríveis de utilitários de tipos que podem impulsionar seus trabalhos com tipos, como ts-toolbelt, utility-types, SimplyTyped, etc., que você já pode usar.
Esse projeto tem como objetivo ajudar você a entender melhor como um sistema de tipos funciona, escrevendo seus próprios utilitários, ou apenas se divertindo com os desafios. Nós também tentamos criar uma comunidade onde você pode fazer perguntas e obter respostas de problemas reais - eles podem se tornar parte dos desafios!
Clique nas etiquetas abaixo para ver detalhes dos desafios.
Nota: Os desafios funcionam em modo estrito
Por Texto Simples
- 4・Pick
- 7・Readonly
- 11・Tuple to Object
- 14・First of Array
- 18・Length of Tuple
- 43・Exclude
- 189・Awaited
- 268・If
- 533・Concat
- 898・Includes
- 3057・Push
- 3060・Unshift
- 3312・Parameters
- 2・Obter Tipo de Retorno
- 3・Omit
- 8・Readonly 2
- 9・Deep Readonly
- 10・Tuple to Union
- 12・Chainable Options
- 15・Last of Array
- 16・Pop
- 20・Promise.all
- 62・Type Lookup
- 106・Trim Left
- 108・Trim
- 110・Capitalize
- 116・Replace
- 119・ReplaceAll
- 191・Append Argument
- 296・Permutation
- 298・Length of String
- 459・Flatten
- 527・Append to object
- 529・Absolute
- 531・String to Union
- 599・Merge
- 612・KebabCase
- 645・Diff
- 949・AnyOf
- 1042・IsNever
- 1097・IsUnion
- 1130・ReplaceKeys
- 1367・Remove Index Signature
- 1978・Percentage Parser
- 2070・Drop Char
- 2257・MinusOne
- 2595・PickByType
- 2688・StartsWith
- 2693・EndsWith
- 2757・PartialByKeys
- 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・AllCombinations
- 4425・Greater Than
- 4471・Zip
- 4484・IsTuple
- 4499・Chunk
- 4518・Fill
- 4803・Trim Right
- 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
- 9616・Parse URL Params
- 9896・GetMiddleElement
- 9898・Appear only once
- 9989・Count Element Number To Object
- 10969・Integer
- 16259・ToPrimitive
- 17973・DeepMutable
- 18142・All
- 18220・Filter
- 21104・FindAll
- 21106・Combination key type
- 21220・Permutations of Tuple
- 25170・Replace First
- 25270・Transpose
- 26401・JSON Schema to TypeScript
- 27133・Square
- 27152・Triangular number
- 27862・CartesianProduct
- 27932・MergeAll
- 27958・CheckRepeatedTuple
- 28333・Public Type
- 29650・ExtractToObject
- 29785・Deep Omit
- 30301・IsOdd
- 30430・Tower of hanoi
- 30958・Pascal's triangle
- 30970・IsFixedStringLiteralType
- 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
- 28143・OptionalUndefined
- 30178・Unique Items
- 30575・BitwiseXOR
- 31797・Sudoku
- 31824・Length of String 3
- 32427・Unbox
- 32532・Binary Addition
🔥 Comece o desafio no playground do TypeScript
🚀 Comece o desafio localmente em sua IDE ou editor de texto com suporte para TypeScript
⚡️ Comece o desafio no VS Code Extension
- Learn Advanced TypeScript Types
- The Art of Type Programming
- Type Query: jQuery Style Type Manipulation
- TypeScript Deep Dive
- 🎥 Video Explanations and Solutions for every challenge!
- Type Challenges Solutions
- Type Gymnastics
- TypeType Examples
Há diversas formas de você contribuir para esse projeto
- Compartilhe suas respostas / soluções
- Proponha novos desafios
- Adicione mais casos de teste aos desafios existentes
- Forneça materiais de estudo ou ideias sobre como resolver desafios
- Compartilhe os problemas reais que você lida em seus projetos, havendo solução ou não - a comunidade poderá te ajudar também
- Ajude os outros com discussões nas issues
- Contribua com a infra desse projeto TODOs.md
Apenas abra uma issue and escolha o template correspondente. Agradecemos!
Você pode fazer a build dos desafios e executar localmente em sua IDE ou editor de texto com suporte a TypeScript.
Para fazer isso, você irá precisar da última versão do Node.js e pnpm instaladas.
Após clonar o repositório, instale as dependencias usando:
pnpm install
E depois execute o comando generate
:
pnpm generate
Isso irá retornar uma lista de linguagens e então, você pode encontrar o desafio gerado na pasta ./playground
.
Se você quiser atualizar o playground mantendo suas alterações:
pnpm generate --keep-changes
ou
pnpm generate -K
Esse projeto nasceu de resoluções de problemas reais com tipos com @hardfist e @MeCKodo. E um muito obrigado para @sinoon que contribuiu muito ao dar feedback inicial sobre este projeto.
MIT