aigroup-workflow 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +5 -5
- package/package.json +40 -39
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +195 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,329 +1,329 @@
|
|
|
1
|
-
# Utility Types
|
|
2
|
-
|
|
3
|
-
## Built-in Utility Types
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
// Partial - All properties optional
|
|
7
|
-
interface User {
|
|
8
|
-
id: number;
|
|
9
|
-
name: string;
|
|
10
|
-
email: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
type PartialUser = Partial<User>;
|
|
14
|
-
// { id?: number; name?: string; email?: string; }
|
|
15
|
-
|
|
16
|
-
function updateUser(id: number, updates: Partial<User>) {
|
|
17
|
-
// Only pass fields to update
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Required - All properties required
|
|
21
|
-
type RequiredUser = Required<PartialUser>;
|
|
22
|
-
// { id: number; name: string; email: string; }
|
|
23
|
-
|
|
24
|
-
// Readonly - All properties readonly
|
|
25
|
-
type ReadonlyUser = Readonly<User>;
|
|
26
|
-
// { readonly id: number; readonly name: string; readonly email: string; }
|
|
27
|
-
|
|
28
|
-
// Pick - Select specific properties
|
|
29
|
-
type UserSummary = Pick<User, 'id' | 'name'>;
|
|
30
|
-
// { id: number; name: string; }
|
|
31
|
-
|
|
32
|
-
// Omit - Exclude specific properties
|
|
33
|
-
type UserWithoutEmail = Omit<User, 'email'>;
|
|
34
|
-
// { id: number; name: string; }
|
|
35
|
-
|
|
36
|
-
// Record - Create object type with specific keys
|
|
37
|
-
type UserRoles = Record<string, 'admin' | 'user' | 'guest'>;
|
|
38
|
-
// { [key: string]: 'admin' | 'user' | 'guest' }
|
|
39
|
-
|
|
40
|
-
type PageInfo = Record<'home' | 'about' | 'contact', { title: string }>;
|
|
41
|
-
// { home: { title: string }, about: { title: string }, contact: { title: string } }
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Type Extraction Utilities
|
|
45
|
-
|
|
46
|
-
```typescript
|
|
47
|
-
// Extract - Extract types from union
|
|
48
|
-
type AllTypes = 'a' | 'b' | 'c' | 1 | 2 | 3;
|
|
49
|
-
type StringTypes = Extract<AllTypes, string>; // 'a' | 'b' | 'c'
|
|
50
|
-
type NumberTypes = Extract<AllTypes, number>; // 1 | 2 | 3
|
|
51
|
-
|
|
52
|
-
// Exclude - Remove types from union
|
|
53
|
-
type WithoutNumbers = Exclude<AllTypes, number>; // 'a' | 'b' | 'c'
|
|
54
|
-
|
|
55
|
-
// NonNullable - Remove null and undefined
|
|
56
|
-
type MaybeString = string | null | undefined;
|
|
57
|
-
type DefiniteString = NonNullable<MaybeString>; // string
|
|
58
|
-
|
|
59
|
-
// ReturnType - Extract function return type
|
|
60
|
-
function getUser() {
|
|
61
|
-
return { id: 1, name: 'John' };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
type User = ReturnType<typeof getUser>; // { id: number; name: string }
|
|
65
|
-
|
|
66
|
-
// Parameters - Extract function parameter types
|
|
67
|
-
function createUser(name: string, age: number) {
|
|
68
|
-
return { name, age };
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
type CreateUserParams = Parameters<typeof createUser>; // [string, number]
|
|
72
|
-
|
|
73
|
-
// ConstructorParameters - Extract constructor parameters
|
|
74
|
-
class Point {
|
|
75
|
-
constructor(public x: number, public y: number) {}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
type PointParams = ConstructorParameters<typeof Point>; // [number, number]
|
|
79
|
-
|
|
80
|
-
// InstanceType - Extract instance type from constructor
|
|
81
|
-
type PointInstance = InstanceType<typeof Point>; // Point
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Custom Utility Types
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
// DeepPartial - Recursive partial
|
|
88
|
-
type DeepPartial<T> = T extends object ? {
|
|
89
|
-
[K in keyof T]?: DeepPartial<T[K]>;
|
|
90
|
-
} : T;
|
|
91
|
-
|
|
92
|
-
interface Config {
|
|
93
|
-
database: {
|
|
94
|
-
host: string;
|
|
95
|
-
port: number;
|
|
96
|
-
credentials: {
|
|
97
|
-
username: string;
|
|
98
|
-
password: string;
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
type PartialConfig = DeepPartial<Config>;
|
|
104
|
-
// All nested properties are optional
|
|
105
|
-
|
|
106
|
-
// DeepReadonly - Recursive readonly
|
|
107
|
-
type DeepReadonly<T> = T extends object ? {
|
|
108
|
-
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
109
|
-
} : T;
|
|
110
|
-
|
|
111
|
-
// Mutable - Remove readonly
|
|
112
|
-
type Mutable<T> = {
|
|
113
|
-
-readonly [K in keyof T]: T[K];
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
type MutableUser = Mutable<ReadonlyUser>;
|
|
117
|
-
|
|
118
|
-
// PickByType - Pick properties by value type
|
|
119
|
-
type PickByType<T, U> = {
|
|
120
|
-
[K in keyof T as T[K] extends U ? K : never]: T[K];
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
interface Mixed {
|
|
124
|
-
id: number;
|
|
125
|
-
name: string;
|
|
126
|
-
age: number;
|
|
127
|
-
email: string;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
type StringProps = PickByType<Mixed, string>; // { name: string; email: string }
|
|
131
|
-
type NumberProps = PickByType<Mixed, number>; // { id: number; age: number }
|
|
132
|
-
|
|
133
|
-
// OmitByType - Omit properties by value type
|
|
134
|
-
type OmitByType<T, U> = {
|
|
135
|
-
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
type NoStrings = OmitByType<Mixed, string>; // { id: number; age: number }
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## Function Utilities
|
|
142
|
-
|
|
143
|
-
```typescript
|
|
144
|
-
// Promisify - Convert sync to async
|
|
145
|
-
type Promisify<T extends (...args: any[]) => any> = (
|
|
146
|
-
...args: Parameters<T>
|
|
147
|
-
) => Promise<ReturnType<T>>;
|
|
148
|
-
|
|
149
|
-
function syncFunction(x: number): string {
|
|
150
|
-
return x.toString();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
type AsyncVersion = Promisify<typeof syncFunction>;
|
|
154
|
-
// (x: number) => Promise<string>
|
|
155
|
-
|
|
156
|
-
// Awaited - Unwrap promise type
|
|
157
|
-
type AwaitedString = Awaited<Promise<string>>; // string
|
|
158
|
-
type DeepAwaited = Awaited<Promise<Promise<number>>>; // number
|
|
159
|
-
|
|
160
|
-
// ThisParameterType - Extract this parameter
|
|
161
|
-
function greet(this: User, message: string) {
|
|
162
|
-
return `${this.name}: ${message}`;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
type ThisType = ThisParameterType<typeof greet>; // User
|
|
166
|
-
|
|
167
|
-
// OmitThisParameter - Remove this parameter
|
|
168
|
-
type GreetFunction = OmitThisParameter<typeof greet>;
|
|
169
|
-
// (message: string) => string
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Advanced Custom Utilities
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
// Nullable - Add null and undefined
|
|
176
|
-
type Nullable<T> = T | null | undefined;
|
|
177
|
-
|
|
178
|
-
// ValueOf - Get union of all property values
|
|
179
|
-
type ValueOf<T> = T[keyof T];
|
|
180
|
-
|
|
181
|
-
interface Codes {
|
|
182
|
-
success: 200;
|
|
183
|
-
notFound: 404;
|
|
184
|
-
error: 500;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
type StatusCode = ValueOf<Codes>; // 200 | 404 | 500
|
|
188
|
-
|
|
189
|
-
// RequireAtLeastOne - Require at least one property
|
|
190
|
-
type RequireAtLeastOne<T, Keys extends keyof T = keyof T> =
|
|
191
|
-
Pick<T, Exclude<keyof T, Keys>> &
|
|
192
|
-
{
|
|
193
|
-
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
|
194
|
-
}[Keys];
|
|
195
|
-
|
|
196
|
-
interface Options {
|
|
197
|
-
id?: number;
|
|
198
|
-
name?: string;
|
|
199
|
-
email?: string;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
type AtLeastOne = RequireAtLeastOne<Options>;
|
|
203
|
-
// Must have at least one of id, name, or email
|
|
204
|
-
|
|
205
|
-
// RequireOnlyOne - Require exactly one property
|
|
206
|
-
type RequireOnlyOne<T, Keys extends keyof T = keyof T> =
|
|
207
|
-
Pick<T, Exclude<keyof T, Keys>> &
|
|
208
|
-
{
|
|
209
|
-
[K in Keys]-?:
|
|
210
|
-
Required<Pick<T, K>> &
|
|
211
|
-
Partial<Record<Exclude<Keys, K>, undefined>>;
|
|
212
|
-
}[Keys];
|
|
213
|
-
|
|
214
|
-
type OnlyOne = RequireOnlyOne<Options>;
|
|
215
|
-
// Must have exactly one of id, name, or email
|
|
216
|
-
|
|
217
|
-
// Merge - Deep merge two types
|
|
218
|
-
type Merge<T, U> = Omit<T, keyof U> & U;
|
|
219
|
-
|
|
220
|
-
interface Base {
|
|
221
|
-
id: number;
|
|
222
|
-
name: string;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
interface Extension {
|
|
226
|
-
name: string; // Override
|
|
227
|
-
email: string; // Add
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
type Combined = Merge<Base, Extension>;
|
|
231
|
-
// { id: number; name: string; email: string }
|
|
232
|
-
|
|
233
|
-
// ConditionalKeys - Get keys matching condition
|
|
234
|
-
type ConditionalKeys<T, Condition> = {
|
|
235
|
-
[K in keyof T]: T[K] extends Condition ? K : never;
|
|
236
|
-
}[keyof T];
|
|
237
|
-
|
|
238
|
-
type FunctionKeys = ConditionalKeys<typeof Math, Function>;
|
|
239
|
-
// 'abs' | 'acos' | 'sin' | ...
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## Tuple Utilities
|
|
243
|
-
|
|
244
|
-
```typescript
|
|
245
|
-
// First - Get first element type
|
|
246
|
-
type First<T extends any[]> = T extends [infer F, ...any[]] ? F : never;
|
|
247
|
-
|
|
248
|
-
type FirstType = First<[string, number, boolean]>; // string
|
|
249
|
-
|
|
250
|
-
// Last - Get last element type
|
|
251
|
-
type Last<T extends any[]> = T extends [...any[], infer L] ? L : never;
|
|
252
|
-
|
|
253
|
-
type LastType = Last<[string, number, boolean]>; // boolean
|
|
254
|
-
|
|
255
|
-
// Tail - Remove first element
|
|
256
|
-
type Tail<T extends any[]> = T extends [any, ...infer Rest] ? Rest : never;
|
|
257
|
-
|
|
258
|
-
type TailTypes = Tail<[string, number, boolean]>; // [number, boolean]
|
|
259
|
-
|
|
260
|
-
// Prepend - Add element to beginning
|
|
261
|
-
type Prepend<T extends any[], U> = [U, ...T];
|
|
262
|
-
|
|
263
|
-
type WithString = Prepend<[number, boolean], string>; // [string, number, boolean]
|
|
264
|
-
|
|
265
|
-
// Reverse - Reverse tuple
|
|
266
|
-
type Reverse<T extends any[]> =
|
|
267
|
-
T extends [infer First, ...infer Rest]
|
|
268
|
-
? [...Reverse<Rest>, First]
|
|
269
|
-
: [];
|
|
270
|
-
|
|
271
|
-
type Reversed = Reverse<[1, 2, 3]>; // [3, 2, 1]
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
## String Utilities
|
|
275
|
-
|
|
276
|
-
```typescript
|
|
277
|
-
// Split - Split string into tuple
|
|
278
|
-
type Split<S extends string, D extends string> =
|
|
279
|
-
S extends `${infer T}${D}${infer U}`
|
|
280
|
-
? [T, ...Split<U, D>]
|
|
281
|
-
: [S];
|
|
282
|
-
|
|
283
|
-
type Parts = Split<'a-b-c', '-'>; // ['a', 'b', 'c']
|
|
284
|
-
|
|
285
|
-
// Join - Join tuple into string
|
|
286
|
-
type Join<T extends string[], D extends string> =
|
|
287
|
-
T extends [infer F extends string, ...infer R extends string[]]
|
|
288
|
-
? R extends []
|
|
289
|
-
? F
|
|
290
|
-
: `${F}${D}${Join<R, D>}`
|
|
291
|
-
: '';
|
|
292
|
-
|
|
293
|
-
type Joined = Join<['a', 'b', 'c'], '-'>; // 'a-b-c'
|
|
294
|
-
|
|
295
|
-
// Replace - Replace substring
|
|
296
|
-
type Replace<
|
|
297
|
-
S extends string,
|
|
298
|
-
From extends string,
|
|
299
|
-
To extends string
|
|
300
|
-
> = S extends `${infer L}${From}${infer R}`
|
|
301
|
-
? `${L}${To}${R}`
|
|
302
|
-
: S;
|
|
303
|
-
|
|
304
|
-
type Replaced = Replace<'hello world', 'world', 'TypeScript'>;
|
|
305
|
-
// 'hello TypeScript'
|
|
306
|
-
|
|
307
|
-
// TrimLeft - Remove leading whitespace
|
|
308
|
-
type TrimLeft<S extends string> =
|
|
309
|
-
S extends ` ${infer Rest}` ? TrimLeft<Rest> : S;
|
|
310
|
-
|
|
311
|
-
type Trimmed = TrimLeft<' hello'>; // 'hello'
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
## Quick Reference
|
|
315
|
-
|
|
316
|
-
| Utility | Purpose |
|
|
317
|
-
|---------|---------|
|
|
318
|
-
| `Partial<T>` | Make all properties optional |
|
|
319
|
-
| `Required<T>` | Make all properties required |
|
|
320
|
-
| `Readonly<T>` | Make all properties readonly |
|
|
321
|
-
| `Pick<T, K>` | Select subset of properties |
|
|
322
|
-
| `Omit<T, K>` | Remove subset of properties |
|
|
323
|
-
| `Record<K, T>` | Create object type with keys K |
|
|
324
|
-
| `Extract<T, U>` | Extract types assignable to U |
|
|
325
|
-
| `Exclude<T, U>` | Remove types assignable to U |
|
|
326
|
-
| `NonNullable<T>` | Remove null and undefined |
|
|
327
|
-
| `ReturnType<T>` | Extract function return type |
|
|
328
|
-
| `Parameters<T>` | Extract function parameters |
|
|
329
|
-
| `Awaited<T>` | Unwrap Promise type |
|
|
1
|
+
# Utility Types
|
|
2
|
+
|
|
3
|
+
## Built-in Utility Types
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// Partial - All properties optional
|
|
7
|
+
interface User {
|
|
8
|
+
id: number;
|
|
9
|
+
name: string;
|
|
10
|
+
email: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type PartialUser = Partial<User>;
|
|
14
|
+
// { id?: number; name?: string; email?: string; }
|
|
15
|
+
|
|
16
|
+
function updateUser(id: number, updates: Partial<User>) {
|
|
17
|
+
// Only pass fields to update
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Required - All properties required
|
|
21
|
+
type RequiredUser = Required<PartialUser>;
|
|
22
|
+
// { id: number; name: string; email: string; }
|
|
23
|
+
|
|
24
|
+
// Readonly - All properties readonly
|
|
25
|
+
type ReadonlyUser = Readonly<User>;
|
|
26
|
+
// { readonly id: number; readonly name: string; readonly email: string; }
|
|
27
|
+
|
|
28
|
+
// Pick - Select specific properties
|
|
29
|
+
type UserSummary = Pick<User, 'id' | 'name'>;
|
|
30
|
+
// { id: number; name: string; }
|
|
31
|
+
|
|
32
|
+
// Omit - Exclude specific properties
|
|
33
|
+
type UserWithoutEmail = Omit<User, 'email'>;
|
|
34
|
+
// { id: number; name: string; }
|
|
35
|
+
|
|
36
|
+
// Record - Create object type with specific keys
|
|
37
|
+
type UserRoles = Record<string, 'admin' | 'user' | 'guest'>;
|
|
38
|
+
// { [key: string]: 'admin' | 'user' | 'guest' }
|
|
39
|
+
|
|
40
|
+
type PageInfo = Record<'home' | 'about' | 'contact', { title: string }>;
|
|
41
|
+
// { home: { title: string }, about: { title: string }, contact: { title: string } }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Type Extraction Utilities
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// Extract - Extract types from union
|
|
48
|
+
type AllTypes = 'a' | 'b' | 'c' | 1 | 2 | 3;
|
|
49
|
+
type StringTypes = Extract<AllTypes, string>; // 'a' | 'b' | 'c'
|
|
50
|
+
type NumberTypes = Extract<AllTypes, number>; // 1 | 2 | 3
|
|
51
|
+
|
|
52
|
+
// Exclude - Remove types from union
|
|
53
|
+
type WithoutNumbers = Exclude<AllTypes, number>; // 'a' | 'b' | 'c'
|
|
54
|
+
|
|
55
|
+
// NonNullable - Remove null and undefined
|
|
56
|
+
type MaybeString = string | null | undefined;
|
|
57
|
+
type DefiniteString = NonNullable<MaybeString>; // string
|
|
58
|
+
|
|
59
|
+
// ReturnType - Extract function return type
|
|
60
|
+
function getUser() {
|
|
61
|
+
return { id: 1, name: 'John' };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type User = ReturnType<typeof getUser>; // { id: number; name: string }
|
|
65
|
+
|
|
66
|
+
// Parameters - Extract function parameter types
|
|
67
|
+
function createUser(name: string, age: number) {
|
|
68
|
+
return { name, age };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
type CreateUserParams = Parameters<typeof createUser>; // [string, number]
|
|
72
|
+
|
|
73
|
+
// ConstructorParameters - Extract constructor parameters
|
|
74
|
+
class Point {
|
|
75
|
+
constructor(public x: number, public y: number) {}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
type PointParams = ConstructorParameters<typeof Point>; // [number, number]
|
|
79
|
+
|
|
80
|
+
// InstanceType - Extract instance type from constructor
|
|
81
|
+
type PointInstance = InstanceType<typeof Point>; // Point
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Custom Utility Types
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// DeepPartial - Recursive partial
|
|
88
|
+
type DeepPartial<T> = T extends object ? {
|
|
89
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
90
|
+
} : T;
|
|
91
|
+
|
|
92
|
+
interface Config {
|
|
93
|
+
database: {
|
|
94
|
+
host: string;
|
|
95
|
+
port: number;
|
|
96
|
+
credentials: {
|
|
97
|
+
username: string;
|
|
98
|
+
password: string;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
type PartialConfig = DeepPartial<Config>;
|
|
104
|
+
// All nested properties are optional
|
|
105
|
+
|
|
106
|
+
// DeepReadonly - Recursive readonly
|
|
107
|
+
type DeepReadonly<T> = T extends object ? {
|
|
108
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
109
|
+
} : T;
|
|
110
|
+
|
|
111
|
+
// Mutable - Remove readonly
|
|
112
|
+
type Mutable<T> = {
|
|
113
|
+
-readonly [K in keyof T]: T[K];
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
type MutableUser = Mutable<ReadonlyUser>;
|
|
117
|
+
|
|
118
|
+
// PickByType - Pick properties by value type
|
|
119
|
+
type PickByType<T, U> = {
|
|
120
|
+
[K in keyof T as T[K] extends U ? K : never]: T[K];
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
interface Mixed {
|
|
124
|
+
id: number;
|
|
125
|
+
name: string;
|
|
126
|
+
age: number;
|
|
127
|
+
email: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
type StringProps = PickByType<Mixed, string>; // { name: string; email: string }
|
|
131
|
+
type NumberProps = PickByType<Mixed, number>; // { id: number; age: number }
|
|
132
|
+
|
|
133
|
+
// OmitByType - Omit properties by value type
|
|
134
|
+
type OmitByType<T, U> = {
|
|
135
|
+
[K in keyof T as T[K] extends U ? never : K]: T[K];
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
type NoStrings = OmitByType<Mixed, string>; // { id: number; age: number }
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Function Utilities
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
// Promisify - Convert sync to async
|
|
145
|
+
type Promisify<T extends (...args: any[]) => any> = (
|
|
146
|
+
...args: Parameters<T>
|
|
147
|
+
) => Promise<ReturnType<T>>;
|
|
148
|
+
|
|
149
|
+
function syncFunction(x: number): string {
|
|
150
|
+
return x.toString();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
type AsyncVersion = Promisify<typeof syncFunction>;
|
|
154
|
+
// (x: number) => Promise<string>
|
|
155
|
+
|
|
156
|
+
// Awaited - Unwrap promise type
|
|
157
|
+
type AwaitedString = Awaited<Promise<string>>; // string
|
|
158
|
+
type DeepAwaited = Awaited<Promise<Promise<number>>>; // number
|
|
159
|
+
|
|
160
|
+
// ThisParameterType - Extract this parameter
|
|
161
|
+
function greet(this: User, message: string) {
|
|
162
|
+
return `${this.name}: ${message}`;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
type ThisType = ThisParameterType<typeof greet>; // User
|
|
166
|
+
|
|
167
|
+
// OmitThisParameter - Remove this parameter
|
|
168
|
+
type GreetFunction = OmitThisParameter<typeof greet>;
|
|
169
|
+
// (message: string) => string
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Advanced Custom Utilities
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// Nullable - Add null and undefined
|
|
176
|
+
type Nullable<T> = T | null | undefined;
|
|
177
|
+
|
|
178
|
+
// ValueOf - Get union of all property values
|
|
179
|
+
type ValueOf<T> = T[keyof T];
|
|
180
|
+
|
|
181
|
+
interface Codes {
|
|
182
|
+
success: 200;
|
|
183
|
+
notFound: 404;
|
|
184
|
+
error: 500;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
type StatusCode = ValueOf<Codes>; // 200 | 404 | 500
|
|
188
|
+
|
|
189
|
+
// RequireAtLeastOne - Require at least one property
|
|
190
|
+
type RequireAtLeastOne<T, Keys extends keyof T = keyof T> =
|
|
191
|
+
Pick<T, Exclude<keyof T, Keys>> &
|
|
192
|
+
{
|
|
193
|
+
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
|
194
|
+
}[Keys];
|
|
195
|
+
|
|
196
|
+
interface Options {
|
|
197
|
+
id?: number;
|
|
198
|
+
name?: string;
|
|
199
|
+
email?: string;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
type AtLeastOne = RequireAtLeastOne<Options>;
|
|
203
|
+
// Must have at least one of id, name, or email
|
|
204
|
+
|
|
205
|
+
// RequireOnlyOne - Require exactly one property
|
|
206
|
+
type RequireOnlyOne<T, Keys extends keyof T = keyof T> =
|
|
207
|
+
Pick<T, Exclude<keyof T, Keys>> &
|
|
208
|
+
{
|
|
209
|
+
[K in Keys]-?:
|
|
210
|
+
Required<Pick<T, K>> &
|
|
211
|
+
Partial<Record<Exclude<Keys, K>, undefined>>;
|
|
212
|
+
}[Keys];
|
|
213
|
+
|
|
214
|
+
type OnlyOne = RequireOnlyOne<Options>;
|
|
215
|
+
// Must have exactly one of id, name, or email
|
|
216
|
+
|
|
217
|
+
// Merge - Deep merge two types
|
|
218
|
+
type Merge<T, U> = Omit<T, keyof U> & U;
|
|
219
|
+
|
|
220
|
+
interface Base {
|
|
221
|
+
id: number;
|
|
222
|
+
name: string;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
interface Extension {
|
|
226
|
+
name: string; // Override
|
|
227
|
+
email: string; // Add
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
type Combined = Merge<Base, Extension>;
|
|
231
|
+
// { id: number; name: string; email: string }
|
|
232
|
+
|
|
233
|
+
// ConditionalKeys - Get keys matching condition
|
|
234
|
+
type ConditionalKeys<T, Condition> = {
|
|
235
|
+
[K in keyof T]: T[K] extends Condition ? K : never;
|
|
236
|
+
}[keyof T];
|
|
237
|
+
|
|
238
|
+
type FunctionKeys = ConditionalKeys<typeof Math, Function>;
|
|
239
|
+
// 'abs' | 'acos' | 'sin' | ...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Tuple Utilities
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
// First - Get first element type
|
|
246
|
+
type First<T extends any[]> = T extends [infer F, ...any[]] ? F : never;
|
|
247
|
+
|
|
248
|
+
type FirstType = First<[string, number, boolean]>; // string
|
|
249
|
+
|
|
250
|
+
// Last - Get last element type
|
|
251
|
+
type Last<T extends any[]> = T extends [...any[], infer L] ? L : never;
|
|
252
|
+
|
|
253
|
+
type LastType = Last<[string, number, boolean]>; // boolean
|
|
254
|
+
|
|
255
|
+
// Tail - Remove first element
|
|
256
|
+
type Tail<T extends any[]> = T extends [any, ...infer Rest] ? Rest : never;
|
|
257
|
+
|
|
258
|
+
type TailTypes = Tail<[string, number, boolean]>; // [number, boolean]
|
|
259
|
+
|
|
260
|
+
// Prepend - Add element to beginning
|
|
261
|
+
type Prepend<T extends any[], U> = [U, ...T];
|
|
262
|
+
|
|
263
|
+
type WithString = Prepend<[number, boolean], string>; // [string, number, boolean]
|
|
264
|
+
|
|
265
|
+
// Reverse - Reverse tuple
|
|
266
|
+
type Reverse<T extends any[]> =
|
|
267
|
+
T extends [infer First, ...infer Rest]
|
|
268
|
+
? [...Reverse<Rest>, First]
|
|
269
|
+
: [];
|
|
270
|
+
|
|
271
|
+
type Reversed = Reverse<[1, 2, 3]>; // [3, 2, 1]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## String Utilities
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
// Split - Split string into tuple
|
|
278
|
+
type Split<S extends string, D extends string> =
|
|
279
|
+
S extends `${infer T}${D}${infer U}`
|
|
280
|
+
? [T, ...Split<U, D>]
|
|
281
|
+
: [S];
|
|
282
|
+
|
|
283
|
+
type Parts = Split<'a-b-c', '-'>; // ['a', 'b', 'c']
|
|
284
|
+
|
|
285
|
+
// Join - Join tuple into string
|
|
286
|
+
type Join<T extends string[], D extends string> =
|
|
287
|
+
T extends [infer F extends string, ...infer R extends string[]]
|
|
288
|
+
? R extends []
|
|
289
|
+
? F
|
|
290
|
+
: `${F}${D}${Join<R, D>}`
|
|
291
|
+
: '';
|
|
292
|
+
|
|
293
|
+
type Joined = Join<['a', 'b', 'c'], '-'>; // 'a-b-c'
|
|
294
|
+
|
|
295
|
+
// Replace - Replace substring
|
|
296
|
+
type Replace<
|
|
297
|
+
S extends string,
|
|
298
|
+
From extends string,
|
|
299
|
+
To extends string
|
|
300
|
+
> = S extends `${infer L}${From}${infer R}`
|
|
301
|
+
? `${L}${To}${R}`
|
|
302
|
+
: S;
|
|
303
|
+
|
|
304
|
+
type Replaced = Replace<'hello world', 'world', 'TypeScript'>;
|
|
305
|
+
// 'hello TypeScript'
|
|
306
|
+
|
|
307
|
+
// TrimLeft - Remove leading whitespace
|
|
308
|
+
type TrimLeft<S extends string> =
|
|
309
|
+
S extends ` ${infer Rest}` ? TrimLeft<Rest> : S;
|
|
310
|
+
|
|
311
|
+
type Trimmed = TrimLeft<' hello'>; // 'hello'
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Quick Reference
|
|
315
|
+
|
|
316
|
+
| Utility | Purpose |
|
|
317
|
+
|---------|---------|
|
|
318
|
+
| `Partial<T>` | Make all properties optional |
|
|
319
|
+
| `Required<T>` | Make all properties required |
|
|
320
|
+
| `Readonly<T>` | Make all properties readonly |
|
|
321
|
+
| `Pick<T, K>` | Select subset of properties |
|
|
322
|
+
| `Omit<T, K>` | Remove subset of properties |
|
|
323
|
+
| `Record<K, T>` | Create object type with keys K |
|
|
324
|
+
| `Extract<T, U>` | Extract types assignable to U |
|
|
325
|
+
| `Exclude<T, U>` | Remove types assignable to U |
|
|
326
|
+
| `NonNullable<T>` | Remove null and undefined |
|
|
327
|
+
| `ReturnType<T>` | Extract function return type |
|
|
328
|
+
| `Parameters<T>` | Extract function parameters |
|
|
329
|
+
| `Awaited<T>` | Unwrap Promise type |
|