[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BXYPP4S830CSY3TP0X7JNX":3,"skill-same:01M6BXYPP4S830CSY3TP0X7JNX":57},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":39,"ownerDescription":41,"updatedAt":42,"install":43,"resources":56},"01M6BXYPP4S830CSY3TP0X7JNX","typescript",null,"TypeScript coding conventions, best practices, and patterns for writing clean, maintainable code.","genkit-ai\u002Fgenkit","genkit-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F166032008?v=4","01M6BXY5HK7S076R0K2XMNSVWS","Genkit","01M6BXY5P69270PQG7WYBJZ7FJ",6580,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fjs\u002Ftestapps\u002Fagents\u002Fskills\u002Ftypescript\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28],"writing","code","best practices","coding","clean","patterns","conventions","for","maintainable code","coding conventions","2026-11-10 10:12:30",false,"---\nname: typescript\ndescription: TypeScript coding conventions, best practices, and patterns for writing clean, maintainable code.\n---\n\n# TypeScript Coding Conventions\n\n## General Principles\n\n- Use **TypeScript strict mode** (`\"strict\": true` in tsconfig.json).\n- Prefer `const` over `let`; never use `var`.\n- Use explicit return types on exported functions.\n- Prefer interfaces over type aliases for object shapes.\n- Use `unknown` instead of `any` where possible.\n\n## Naming Conventions\n\n- **Variables & functions**: `camelCase`\n- **Classes & interfaces**: `PascalCase`\n- **Constants**: `UPPER_SNAKE_CASE` for true constants, `camelCase` for derived values\n- **Files**: `kebab-case.ts`\n- **Type parameters**: Single uppercase letter (`T`, `K`, `V`) or descriptive (`TResult`)\n\n## File Structure\n\n```\nsrc\u002F\n  index.ts          # Entry point, exports\n  types.ts          # Shared type definitions\n  utils\u002F            # Utility functions\n  services\u002F         # Business logic\n  middleware\u002F       # Express\u002Fframework middleware\n```\n\n## Error Handling\n\n- Use typed errors (extend `Error` class).\n- Always handle promise rejections.\n- Prefer `try\u002Fcatch` with specific error types over generic catches.\n\n```typescript\nclass AppError extends Error {\n  constructor(\n    message: string,\n    public readonly code: string,\n    public readonly statusCode: number = 500\n  ) {\n    super(message);\n    this.name = 'AppError';\n  }\n}\n```\n\n## Async Patterns\n\n- Use `async\u002Fawait` over raw promises.\n- Use `Promise.all()` for concurrent independent operations.\n- Avoid mixing callbacks and promises.\n\n## Imports\n\n- Use named imports: `import { thing } from '.\u002Fmodule'`\n- Group imports: external packages first, then internal modules.\n- Use `.js` extensions in import paths for ESM compatibility.\n\n## Code Style\n\n- Maximum line length: 100 characters.\n- Use template literals for string interpolation.\n- Prefer `Array.map\u002Ffilter\u002Freduce` over `for` loops for transformations.\n- Use optional chaining (`?.`) and nullish coalescing (`??`).\n- Destructure objects and arrays when accessing multiple properties.\n\n## Testing\n\n- Co-locate test files: `thing.ts` → `thing.test.ts`\n- Use descriptive test names: `it('should return empty array when no items match')`\n- Test edge cases: empty inputs, null values, error conditions.\n","# TypeScript Coding Conventions\n\n## General Principles\n\n- Use **TypeScript strict mode** (`\"strict\": true` in tsconfig.json).\n- Prefer `const` over `let`; never use `var`.\n- Use explicit return types on exported functions.\n- Prefer interfaces over type aliases for object shapes.\n- Use `unknown` instead of `any` where possible.\n\n## Naming Conventions\n\n- **Variables & functions**: `camelCase`\n- **Classes & interfaces**: `PascalCase`\n- **Constants**: `UPPER_SNAKE_CASE` for true constants, `camelCase` for derived values\n- **Files**: `kebab-case.ts`\n- **Type parameters**: Single uppercase letter (`T`, `K`, `V`) or descriptive (`TResult`)\n\n## File Structure\n\n```\nsrc\u002F\n  index.ts          # Entry point, exports\n  types.ts          # Shared type definitions\n  utils\u002F            # Utility functions\n  services\u002F         # Business logic\n  middleware\u002F       # Express\u002Fframework middleware\n```\n\n## Error Handling\n\n- Use typed errors (extend `Error` class).\n- Always handle promise rejections.\n- Prefer `try\u002Fcatch` with specific error types over generic catches.\n\n```typescript\nclass AppError extends Error {\n  constructor(\n    message: string,\n    public readonly code: string,\n    public readonly statusCode: number = 500\n  ) {\n    super(message);\n    this.name = 'AppError';\n  }\n}\n```\n\n## Async Patterns\n\n- Use `async\u002Fawait` over raw promises.\n- Use `Promise.all()` for concurrent independent operations.\n- Avoid mixing callbacks and promises.\n\n## Imports\n\n- Use named imports: `import { thing } from '.\u002Fmodule'`\n- Group imports: external packages first, then internal modules.\n- Use `.js` extensions in import paths for ESM compatibility.\n\n## Code Style\n\n- Maximum line length: 100 characters.\n- Use template literals for string interpolation.\n- Prefer `Array.map\u002Ffilter\u002Freduce` over `for` loops for transformations.\n- Use optional chaining (`?.`) and nullish coalescing (`??`).\n- Destructure objects and arrays when accessing multiple properties.\n\n## Testing\n\n- Co-locate test files: `thing.ts` → `thing.test.ts`\n- Use descriptive test names: `it('should return empty array when no items match')`\n- Test edge cases: empty inputs, null values, error conditions.\n",{"name":5,"description":7},"main","effdb1471a969cecdffce741de036b62b0541fbf","js\u002Ftestapps\u002Fagents\u002Fskills\u002Ftypescript",879,"https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit","https:\u002F\u002Fgenkit.dev","https:\u002F\u002Fgithub.com\u002Fgenkit-ai","Open-source AI framework built by Google","2026-11-11 05:41:53",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add genkit-ai\u002Fgenkit --skill typescript",{"tool":49,"command":50},"bunx","bunx skills add genkit-ai\u002Fgenkit --skill typescript",{"tool":52,"command":53},"pnpm","pnpm dlx skills add genkit-ai\u002Fgenkit --skill typescript","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fjs\u002Ftestapps\u002Fagents\u002Fskills\u002Ftypescript\u002FSKILL.md",true,[],[58,84,109,124,132,143],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":69,"publishedAt":29},"01M6BXYX354T3YJJBJYP8E29S7","developing-genkit-tooling","Best practices for authoring Genkit tooling, including CLI commands and MCP server tools. Covers naming conventions, architectural patterns, and consistency guidelines.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fskills\u002Fdeveloping-genkit-tooling\u002FSKILL.md",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[70,71,72,73,26,74,75,25,76,21,77,78,79,80,81,82,83,24],"genkit","developing genkit tooling","tooling","mcp server","MCP","cli","guidelines","server","naming conventions","Tools","consistency","naming","authoring","commands",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":29},"01M6BXYV05TWTRH1G6Z0VNVF8M","test-writer","How to write pytest tests for modules in this workspace. Load whenever you are about to write or extend tests.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fpy\u002Fsamples\u002Fmiddleware-coding-agent\u002Fskills\u002Ftest-writer\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000008","测试与质量",[94,95,96,97,98,99,100,101,26,102,103,104,105,106,107,108],"writer","test writer","test","tests","how to","about","you","load","extend","pytest","how","workspace","write","write pytest","modules",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":29},"01M6BXYS23FQWMAZB0K1D55BS1","python-expert","Conventions for clean, idiomatic Python. Load whenever you read, edit, or write Python source files.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fpy\u002Fsamples\u002Fmiddleware-coding-agent\u002Fskills\u002Fpython-expert\u002FSKILL.md",[],[116,117,118,23,119,106,120,121,25,100,101,26,122,123],"expert","python expert","python","read","edit","files","source","idiomatic",{"skillNo":125,"name":22,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":29},"01M6BXYMWX3EV2R7MSQK23Z761","A skill for coding that should apply to all coding tasks.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fjs\u002Fplugins\u002Fmiddleware\u002Fexamples\u002Fskills\u002Fcoding\u002FSKILL.md",[],[22,130,26,131],"tasks","apply",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":29},"01M6BXYK1NKV2DH160SNNDDGS4","shakespeare","Respond in the style of William Shakespeare — early modern English, poetic cadence.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fgo\u002Fsamples\u002Fbasic-middleware\u002Fskills\u002Fskills\u002Fshakespeare\u002FSKILL.md",[],[134,139,140,141,142],"english","style","cadence","respond",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":29},"01M6BXYH488TY48Y1JMWAFNGZA","pirate","Respond in the voice of a swashbuckling pirate.","https:\u002F\u002Fgithub.com\u002Fgenkit-ai\u002Fgenkit\u002Fblob\u002Fmain\u002Fgo\u002Fsamples\u002Fbasic-middleware\u002Fskills\u002Fskills\u002Fpirate\u002FSKILL.md",[],[145,150,142],"voice"]