[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JM2YB64FJPB2KQFDYC2DG6":3,"skill-same:01M6JM2YB64FJPB2KQFDYC2DG6":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6JM2YB64FJPB2KQFDYC2DG6","typescript-strict",null,"Enforce TypeScript strict mode and type safety. Use when setting up projects, reviewing code, or when type errors are ignored. Covers strict flags, no-any rules, and type inference best practices.","superhealth\u002Fskills-hub","superhealth","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6292112?v=4","01M6JA6E7F21BYK5W3E4P270TT","01M6JA6EC0W8MPHKDJVBZDSEZ0",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftypescript-strict\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"typescript strict","typescript","write","mode","errors","reviewing code","type","enforce","up","use","edit","read","Rules","projects","Bash","team","Type Safety","best practices","code","antigravity","2026-11-10 10:12:30",false,"---\nname: typescript-strict\ndescription: Enforce TypeScript strict mode and type safety. Use when setting up projects, reviewing code, or when type errors are ignored. Covers strict flags, no-any rules, and type inference best practices.\nallowed-tools: Read, Glob, Grep, Edit, Write, Bash\nlicense: MIT\nmetadata:\n  author: antigravity-team\n  version: \"1.0\"\n---\n\n# TypeScript Strict Mode\n\nTypeScript 엄격 모드와 타입 안전성을 강제하는 스킬입니다.\n\n## 2025 Context\n\n> **TypeScript 5.x에서 strict 모드가 새 프로젝트의 기본값으로 권장됨**\n> **\"any 사용은 TypeScript를 쓰는 의미를 없앤다\"**\n\n## Core Rules\n\n| 규칙 | 상태 | 설명 |\n|------|------|------|\n| `strict: true` | ? 필수 | 모든 엄격 검사 활성화 |\n| `any` 금지 | ? 필수 | `unknown` 또는 제네릭 사용 |\n| `\u002F\u002F @ts-ignore` 금지 | ? 필수 | 타입 에러 해결 필수 |\n| `as` 캐스팅 최소화 | ? 권장 | 타입 가드 우선 |\n\n## tsconfig.json 권장 설정\n\n```json\n{\n  \"compilerOptions\": {\n    \u002F\u002F ? 필수: strict 플래그\n    \"strict\": true,\n\n    \u002F\u002F strict가 포함하는 옵션들 (개별 비활성화 금지)\n    \u002F\u002F \"strictNullChecks\": true,\n    \u002F\u002F \"strictFunctionTypes\": true,\n    \u002F\u002F \"strictBindCallApply\": true,\n    \u002F\u002F \"strictPropertyInitialization\": true,\n    \u002F\u002F \"noImplicitAny\": true,\n    \u002F\u002F \"noImplicitThis\": true,\n    \u002F\u002F \"alwaysStrict\": true,\n\n    \u002F\u002F ? 추가 필수 옵션\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n\n    \u002F\u002F ? 권장 옵션\n    \"exactOptionalPropertyTypes\": true,\n    \"noPropertyAccessFromIndexSignature\": true\n  }\n}\n```\n\n## any 금지\n\n### 문제: any 사용\n\n```typescript\n\u002F\u002F ❌ BAD: any 사용\nfunction processData(data: any) {\n  return data.value;  \u002F\u002F 런타임 에러 가능\n}\n\nconst result: any = fetchData();\nresult.nonExistent();  \u002F\u002F 컴파일 통과, 런타임 에러\n```\n\n### 해결: unknown 또는 타입 명시\n\n```typescript\n\u002F\u002F ✅ GOOD: unknown + 타입 가드\nfunction processData(data: unknown) {\n  if (isValidData(data)) {\n    return data.value;\n  }\n  throw new Error('Invalid data');\n}\n\nfunction isValidData(data: unknown): data is { value: string } {\n  return typeof data === 'object'\n    && data !== null\n    && 'value' in data;\n}\n\n\u002F\u002F ✅ GOOD: 제네릭 사용\nfunction processData\u003CT extends { value: string }>(data: T) {\n  return data.value;\n}\n```\n\n### any → unknown 마이그레이션\n\n```typescript\n\u002F\u002F Before\nfunction parse(json: string): any {\n  return JSON.parse(json);\n}\n\n\u002F\u002F After\nfunction parse(json: string): unknown {\n  return JSON.parse(json);\n}\n\n\u002F\u002F 사용 시 타입 체크 필요\nconst result = parse('{\"name\": \"test\"}');\nif (isUser(result)) {\n  console.log(result.name);  \u002F\u002F 안전\n}\n```\n\n## 타입 단언(as) 최소화\n\n### 문제: 과도한 타입 단언\n\n```typescript\n\u002F\u002F ❌ BAD: 위험한 타입 단언\nconst user = response.data as User;\nuser.name.toUpperCase();  \u002F\u002F null이면 에러\n\n\u002F\u002F ❌ BAD: 이중 단언 (매우 위험)\nconst value = data as unknown as TargetType;\n```\n\n### 해결: 타입 가드 사용\n\n```typescript\n\u002F\u002F ✅ GOOD: 타입 가드\nfunction isUser(data: unknown): data is User {\n  return (\n    typeof data === 'object' &&\n    data !== null &&\n    'name' in data &&\n    typeof (data as { name: unknown }).name === 'string'\n  );\n}\n\nif (isUser(response.data)) {\n  response.data.name.toUpperCase();  \u002F\u002F 안전\n}\n\n\u002F\u002F ✅ GOOD: Zod 스키마 검증\nimport { z } from 'zod';\n\nconst UserSchema = z.object({\n  name: z.string(),\n  email: z.string().email(),\n});\n\nconst user = UserSchema.parse(response.data);\n```\n\n## Null 안전성\n\n### strictNullChecks 활용\n\n```typescript\n\u002F\u002F ❌ BAD: null 체크 없음\nfunction getLength(str: string | null) {\n  return str.length;  \u002F\u002F 에러: null일 수 있음\n}\n\n\u002F\u002F ✅ GOOD: null 체크\nfunction getLength(str: string | null) {\n  if (str === null) return 0;\n  return str.length;\n}\n\n\u002F\u002F ✅ GOOD: 옵셔널 체이닝\nfunction getLength(str: string | null) {\n  return str?.length ?? 0;\n}\n```\n\n### 배열 인덱스 접근\n\n```typescript\n\u002F\u002F noUncheckedIndexedAccess: true 일 때\n\nconst arr = [1, 2, 3];\nconst first = arr[0];  \u002F\u002F number | undefined\n\n\u002F\u002F ❌ BAD: undefined 체크 없음\nconsole.log(first.toFixed(2));  \u002F\u002F 에러\n\n\u002F\u002F ✅ GOOD: undefined 체크\nif (first !== undefined) {\n  console.log(first.toFixed(2));\n}\n\n\u002F\u002F ✅ GOOD: 논리 연산자\nconsole.log(arr[0]?.toFixed(2) ?? 'N\u002FA');\n```\n\n## 함수 타입\n\n### 반환 타입 명시 (권장)\n\n```typescript\n\u002F\u002F ❌ BAD: 반환 타입 추론 의존\nfunction fetchUser(id: string) {\n  return api.get(`\u002Fusers\u002F${id}`);  \u002F\u002F 반환 타입?\n}\n\n\u002F\u002F ✅ GOOD: 명시적 반환 타입\nasync function fetchUser(id: string): Promise\u003CUser> {\n  return api.get(`\u002Fusers\u002F${id}`);\n}\n```\n\n### 함수 오버로드\n\n```typescript\n\u002F\u002F ✅ GOOD: 오버로드로 정확한 타입\nfunction process(input: string): string;\nfunction process(input: number): number;\nfunction process(input: string | number): string | number {\n  if (typeof input === 'string') {\n    return input.toUpperCase();\n  }\n  return input * 2;\n}\n\nconst str = process('hello');  \u002F\u002F string\nconst num = process(42);       \u002F\u002F number\n```\n\n## 제네릭 활용\n\n```typescript\n\u002F\u002F ❌ BAD: any 사용\nfunction first(arr: any[]): any {\n  return arr[0];\n}\n\n\u002F\u002F ✅ GOOD: 제네릭\nfunction first\u003CT>(arr: T[]): T | undefined {\n  return arr[0];\n}\n\n\u002F\u002F ✅ GOOD: 제약 있는 제네릭\nfunction getProperty\u003CT, K extends keyof T>(obj: T, key: K): T[K] {\n  return obj[key];\n}\n```\n\n## ESLint 규칙\n\n```json\n{\n  \"extends\": [\n    \"plugin:@typescript-eslint\u002Frecommended\",\n    \"plugin:@typescript-eslint\u002Frecommended-requiring-type-checking\"\n  ],\n  \"rules\": {\n    \"@typescript-eslint\u002Fno-explicit-any\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-assignment\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-member-access\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-call\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-return\": \"error\",\n    \"@typescript-eslint\u002Fexplicit-function-return-type\": \"warn\",\n    \"@typescript-eslint\u002Fno-non-null-assertion\": \"warn\",\n    \"@typescript-eslint\u002Fprefer-nullish-coalescing\": \"warn\"\n  }\n}\n```\n\n## 금지 패턴\n\n```typescript\n\u002F\u002F ? 절대 금지\n\u002F\u002F @ts-ignore\n\u002F\u002F @ts-nocheck\n\u002F\u002F @ts-expect-error (테스트 제외)\n\u002F\u002F eslint-disable @typescript-eslint\u002Fno-explicit-any\n\n\u002F\u002F ? 금지: any 캐스팅\ndata as any\n(data as unknown) as TargetType\n\n\u002F\u002F ? 최소화\ndata!  \u002F\u002F non-null assertion\ndata as Type  \u002F\u002F 타입 가드 우선\n```\n\n## Workflow\n\n### 1. 새 프로젝트 설정\n\n```bash\n# TypeScript 초기화\nnpx tsc --init\n\n# strict 활성화 확인\ngrep -n \"strict\" tsconfig.json\n```\n\n### 2. 기존 프로젝트 마이그레이션\n\n```bash\n# 1. strict 활성화\n# tsconfig.json: \"strict\": true\n\n# 2. 에러 확인\nnpx tsc --noEmit\n\n# 3. 점진적 수정\n# - any → unknown\n# - as → 타입 가드\n# - null 체크 추가\n```\n\n### 3. 코드 리뷰 체크\n\n```\n타입 안전성 체크:\n- [ ] any 사용하지 않음\n- [ ] @ts-ignore 없음\n- [ ] 타입 단언 최소화\n- [ ] null 체크 적절함\n```\n\n## Checklist\n\n- [ ] `strict: true` 설정\n- [ ] `noUncheckedIndexedAccess: true` 설정\n- [ ] ESLint @typescript-eslint 규칙 적용\n- [ ] any 0개\n- [ ] @ts-ignore 0개\n- [ ] 타입 가드 함수 구현\n- [ ] 명시적 반환 타입 (공개 API)\n\n## References\n\n- [TypeScript Handbook - Strict Mode](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#strict)\n- [typescript-eslint](https:\u002F\u002Ftypescript-eslint.io\u002F)\n- [Zod](https:\u002F\u002Fzod.dev\u002F)\n","# TypeScript Strict Mode\n\nTypeScript 엄격 모드와 타입 안전성을 강제하는 스킬입니다.\n\n## 2025 Context\n\n> **TypeScript 5.x에서 strict 모드가 새 프로젝트의 기본값으로 권장됨**\n> **\"any 사용은 TypeScript를 쓰는 의미를 없앤다\"**\n\n## Core Rules\n\n| 규칙 | 상태 | 설명 |\n|------|------|------|\n| `strict: true` | ? 필수 | 모든 엄격 검사 활성화 |\n| `any` 금지 | ? 필수 | `unknown` 또는 제네릭 사용 |\n| `\u002F\u002F @ts-ignore` 금지 | ? 필수 | 타입 에러 해결 필수 |\n| `as` 캐스팅 최소화 | ? 권장 | 타입 가드 우선 |\n\n## tsconfig.json 권장 설정\n\n```json\n{\n  \"compilerOptions\": {\n    \u002F\u002F ? 필수: strict 플래그\n    \"strict\": true,\n\n    \u002F\u002F strict가 포함하는 옵션들 (개별 비활성화 금지)\n    \u002F\u002F \"strictNullChecks\": true,\n    \u002F\u002F \"strictFunctionTypes\": true,\n    \u002F\u002F \"strictBindCallApply\": true,\n    \u002F\u002F \"strictPropertyInitialization\": true,\n    \u002F\u002F \"noImplicitAny\": true,\n    \u002F\u002F \"noImplicitThis\": true,\n    \u002F\u002F \"alwaysStrict\": true,\n\n    \u002F\u002F ? 추가 필수 옵션\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n\n    \u002F\u002F ? 권장 옵션\n    \"exactOptionalPropertyTypes\": true,\n    \"noPropertyAccessFromIndexSignature\": true\n  }\n}\n```\n\n## any 금지\n\n### 문제: any 사용\n\n```typescript\n\u002F\u002F ❌ BAD: any 사용\nfunction processData(data: any) {\n  return data.value;  \u002F\u002F 런타임 에러 가능\n}\n\nconst result: any = fetchData();\nresult.nonExistent();  \u002F\u002F 컴파일 통과, 런타임 에러\n```\n\n### 해결: unknown 또는 타입 명시\n\n```typescript\n\u002F\u002F ✅ GOOD: unknown + 타입 가드\nfunction processData(data: unknown) {\n  if (isValidData(data)) {\n    return data.value;\n  }\n  throw new Error('Invalid data');\n}\n\nfunction isValidData(data: unknown): data is { value: string } {\n  return typeof data === 'object'\n    && data !== null\n    && 'value' in data;\n}\n\n\u002F\u002F ✅ GOOD: 제네릭 사용\nfunction processData\u003CT extends { value: string }>(data: T) {\n  return data.value;\n}\n```\n\n### any → unknown 마이그레이션\n\n```typescript\n\u002F\u002F Before\nfunction parse(json: string): any {\n  return JSON.parse(json);\n}\n\n\u002F\u002F After\nfunction parse(json: string): unknown {\n  return JSON.parse(json);\n}\n\n\u002F\u002F 사용 시 타입 체크 필요\nconst result = parse('{\"name\": \"test\"}');\nif (isUser(result)) {\n  console.log(result.name);  \u002F\u002F 안전\n}\n```\n\n## 타입 단언(as) 최소화\n\n### 문제: 과도한 타입 단언\n\n```typescript\n\u002F\u002F ❌ BAD: 위험한 타입 단언\nconst user = response.data as User;\nuser.name.toUpperCase();  \u002F\u002F null이면 에러\n\n\u002F\u002F ❌ BAD: 이중 단언 (매우 위험)\nconst value = data as unknown as TargetType;\n```\n\n### 해결: 타입 가드 사용\n\n```typescript\n\u002F\u002F ✅ GOOD: 타입 가드\nfunction isUser(data: unknown): data is User {\n  return (\n    typeof data === 'object' &&\n    data !== null &&\n    'name' in data &&\n    typeof (data as { name: unknown }).name === 'string'\n  );\n}\n\nif (isUser(response.data)) {\n  response.data.name.toUpperCase();  \u002F\u002F 안전\n}\n\n\u002F\u002F ✅ GOOD: Zod 스키마 검증\nimport { z } from 'zod';\n\nconst UserSchema = z.object({\n  name: z.string(),\n  email: z.string().email(),\n});\n\nconst user = UserSchema.parse(response.data);\n```\n\n## Null 안전성\n\n### strictNullChecks 활용\n\n```typescript\n\u002F\u002F ❌ BAD: null 체크 없음\nfunction getLength(str: string | null) {\n  return str.length;  \u002F\u002F 에러: null일 수 있음\n}\n\n\u002F\u002F ✅ GOOD: null 체크\nfunction getLength(str: string | null) {\n  if (str === null) return 0;\n  return str.length;\n}\n\n\u002F\u002F ✅ GOOD: 옵셔널 체이닝\nfunction getLength(str: string | null) {\n  return str?.length ?? 0;\n}\n```\n\n### 배열 인덱스 접근\n\n```typescript\n\u002F\u002F noUncheckedIndexedAccess: true 일 때\n\nconst arr = [1, 2, 3];\nconst first = arr[0];  \u002F\u002F number | undefined\n\n\u002F\u002F ❌ BAD: undefined 체크 없음\nconsole.log(first.toFixed(2));  \u002F\u002F 에러\n\n\u002F\u002F ✅ GOOD: undefined 체크\nif (first !== undefined) {\n  console.log(first.toFixed(2));\n}\n\n\u002F\u002F ✅ GOOD: 논리 연산자\nconsole.log(arr[0]?.toFixed(2) ?? 'N\u002FA');\n```\n\n## 함수 타입\n\n### 반환 타입 명시 (권장)\n\n```typescript\n\u002F\u002F ❌ BAD: 반환 타입 추론 의존\nfunction fetchUser(id: string) {\n  return api.get(`\u002Fusers\u002F${id}`);  \u002F\u002F 반환 타입?\n}\n\n\u002F\u002F ✅ GOOD: 명시적 반환 타입\nasync function fetchUser(id: string): Promise\u003CUser> {\n  return api.get(`\u002Fusers\u002F${id}`);\n}\n```\n\n### 함수 오버로드\n\n```typescript\n\u002F\u002F ✅ GOOD: 오버로드로 정확한 타입\nfunction process(input: string): string;\nfunction process(input: number): number;\nfunction process(input: string | number): string | number {\n  if (typeof input === 'string') {\n    return input.toUpperCase();\n  }\n  return input * 2;\n}\n\nconst str = process('hello');  \u002F\u002F string\nconst num = process(42);       \u002F\u002F number\n```\n\n## 제네릭 활용\n\n```typescript\n\u002F\u002F ❌ BAD: any 사용\nfunction first(arr: any[]): any {\n  return arr[0];\n}\n\n\u002F\u002F ✅ GOOD: 제네릭\nfunction first\u003CT>(arr: T[]): T | undefined {\n  return arr[0];\n}\n\n\u002F\u002F ✅ GOOD: 제약 있는 제네릭\nfunction getProperty\u003CT, K extends keyof T>(obj: T, key: K): T[K] {\n  return obj[key];\n}\n```\n\n## ESLint 규칙\n\n```json\n{\n  \"extends\": [\n    \"plugin:@typescript-eslint\u002Frecommended\",\n    \"plugin:@typescript-eslint\u002Frecommended-requiring-type-checking\"\n  ],\n  \"rules\": {\n    \"@typescript-eslint\u002Fno-explicit-any\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-assignment\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-member-access\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-call\": \"error\",\n    \"@typescript-eslint\u002Fno-unsafe-return\": \"error\",\n    \"@typescript-eslint\u002Fexplicit-function-return-type\": \"warn\",\n    \"@typescript-eslint\u002Fno-non-null-assertion\": \"warn\",\n    \"@typescript-eslint\u002Fprefer-nullish-coalescing\": \"warn\"\n  }\n}\n```\n\n## 금지 패턴\n\n```typescript\n\u002F\u002F ? 절대 금지\n\u002F\u002F @ts-ignore\n\u002F\u002F @ts-nocheck\n\u002F\u002F @ts-expect-error (테스트 제외)\n\u002F\u002F eslint-disable @typescript-eslint\u002Fno-explicit-any\n\n\u002F\u002F ? 금지: any 캐스팅\ndata as any\n(data as unknown) as TargetType\n\n\u002F\u002F ? 최소화\ndata!  \u002F\u002F non-null assertion\ndata as Type  \u002F\u002F 타입 가드 우선\n```\n\n## Workflow\n\n### 1. 새 프로젝트 설정\n\n```bash\n# TypeScript 초기화\nnpx tsc --init\n\n# strict 활성화 확인\ngrep -n \"strict\" tsconfig.json\n```\n\n### 2. 기존 프로젝트 마이그레이션\n\n```bash\n# 1. strict 활성화\n# tsconfig.json: \"strict\": true\n\n# 2. 에러 확인\nnpx tsc --noEmit\n\n# 3. 점진적 수정\n# - any → unknown\n# - as → 타입 가드\n# - null 체크 추가\n```\n\n### 3. 코드 리뷰 체크\n\n```\n타입 안전성 체크:\n- [ ] any 사용하지 않음\n- [ ] @ts-ignore 없음\n- [ ] 타입 단언 최소화\n- [ ] null 체크 적절함\n```\n\n## Checklist\n\n- [ ] `strict: true` 설정\n- [ ] `noUncheckedIndexedAccess: true` 설정\n- [ ] ESLint @typescript-eslint 규칙 적용\n- [ ] any 0개\n- [ ] @ts-ignore 0개\n- [ ] 타입 가드 함수 구현\n- [ ] 명시적 반환 타입 (공개 API)\n\n## References\n\n- [TypeScript Handbook - Strict Mode](https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#strict)\n- [typescript-eslint](https:\u002F\u002Ftypescript-eslint.io\u002F)\n- [Zod](https:\u002F\u002Fzod.dev\u002F)\n",{"name":5,"license":14,"metadata":43,"description":7,"allowed-tools":46},{"author":44,"version":45},"antigravity-team","1.0","Read, Glob, Grep, Edit, Write, Bash","master","08cc2532077058aa50e6e18f54695bc256c88152","skills\u002Fdoyajin174\u002Ftypescript-strict","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub","https:\u002F\u002Fgithub.com\u002Fsuperhealth","java engineer","2026-04-06 22:07:23",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add superhealth\u002Fskills-hub --skill typescript-strict",{"tool":60,"command":61},"bunx","bunx skills add superhealth\u002Fskills-hub --skill typescript-strict",{"tool":63,"command":64},"pnpm","pnpm dlx skills add superhealth\u002Fskills-hub --skill typescript-strict","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftypescript-strict\u002FSKILL.md",true,[68],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"skill-report.json","REFERENCE","参考文档",13699,"https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fdoyajin174\u002Ftypescript-strict\u002Fskill-report.json",[75,105,132,145,161,185],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":86,"publishedAt":38},"01M6MC9F3WHV8S8FZ2W4TRB0FE","vercel-react-best-practices","React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fzhanlincui\u002Fvercel-react-best-practices\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[87,88,35,89,90,91,36,92,93,94,95,96,97,98,99,100,101,102,103,104],"react","vercel react best practices","vercel","react best practices","data fetching","triggers","pages","next","patterns","refactoring","data","Optimization","tasks","guidelines","react components","components","performance","writing",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":115,"publishedAt":38},"01M6MB8KWE1Q5A5KERR7RFTQWP","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-testing-best-practices\u002FSKILL.md",[111,114],{"categoryNo":112,"categoryName":113,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[116,117,118,35,119,120,121,122,123,27,124,95,125,126,127,128,129,130,131],"vue testing best practices","testing best practices","vue","testing","testing patterns","js","e2e","vitest","component","test","mocking","for","utils","e2e testing","github","playwright",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":38},"01M6MB8GK06M6GA4KVYNDV1BZP","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-router-best-practices\u002FSKILL.md",[138],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[35,118,140,141,142,95,143,144,124,130],"router","vue router best practices","route","navigation","lifecycle",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":38},"01M6MB8DQF21TZMQ9XC3745ERW","vue-pinia-best-practices","Pinia stores, state management patterns, store setup, and reactivity with stores.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-pinia-best-practices\u002FSKILL.md",[151],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[153,154,118,35,155,156,95,157,158,159,160,130],"vue pinia best practices","pinia","with","store","management","state","state management","setup",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":176,"publishedAt":38},"01M6MB8A7MC08747J9TV4GWQ9A","vue-options-api-best-practices","Vue 3 Options API style (data(), methods, this context). Each reference shows Options API solution only.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-options-api-best-practices\u002FSKILL.md",[167,168,171],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":169,"categoryName":170,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[118,177,178,179,35,180,181,182,183,97,130,184],"options","vue options api best practices","api","methods","reference","only","context","style",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":38},"01M6MB85ZTQC24Q04X49MM4YXN","vue-development-guides","A collection of best practices and tips for developing applications using Vue.js. This skill MUST be apply when developing, refactoring or reviewing Vue.js or Nuxt projects.","https:\u002F\u002Fgithub.com\u002Fsuperhealth\u002Fskills-hub\u002Fblob\u002Fmaster\u002Fskills\u002Fvuejs-ai\u002Fvue-development-guides\u002FSKILL.md",[191],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[193,118,194,195,130,196,197,127,198,199,31,121,96,200,201,35],"development","guides","vue development guides","tips","apply","project","nuxt","collection","applications"]