[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-3db093c3-fb64-44b9-af1f-700f8a4c1805":3,"$frbjohTgDSdn-vIAD7yeNIUmmt8SyVIjlhNt31la70Fg":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"3db093c3-fb64-44b9-af1f-700f8a4c1805","fp-option-ref","选项类型快速参考。当用户需要处理可空值、可选数据或希望避免空检查时使用。","cat_life_career","mod_other","sickn33,other","---\nname: fp-option-ref\ndescription: Quick reference for Option type. Use when user needs to handle nullable values, optional data, or wants to avoid null checks.\nrisk: unknown\nsource: community\nversion: 1.0.0\ntags: [fp-ts, option, nullable, maybe, quick-reference]\n---\n\n# Option Quick Reference\n\nOption = value that might not exist. `Some(value)` or `None`.\n\n## When to Use\n- You need a quick fp-ts reference for nullable or optional values.\n- The task involves eliminating null checks, safe property access, or optional chaining with `Option`.\n- You want a short reference card rather than a full migration guide.\n\n## Create\n\n```typescript\nimport * as O from 'fp-ts\u002FOption'\n\nO.some(5)              \u002F\u002F Some(5)\nO.none                 \u002F\u002F None\nO.fromNullable(x)      \u002F\u002F null\u002Fundefined → None, else Some(x)\nO.fromPredicate(x > 0)(x) \u002F\u002F false → None, true → Some(x)\n```\n\n## Transform\n\n```typescript\nO.map(fn)              \u002F\u002F Transform inner value\nO.flatMap(fn)          \u002F\u002F Chain Options (fn returns Option)\nO.filter(predicate)    \u002F\u002F None if predicate false\n```\n\n## Extract\n\n```typescript\nO.getOrElse(() => default)  \u002F\u002F Get value or default\nO.toNullable(opt)           \u002F\u002F Back to T | null\nO.toUndefined(opt)          \u002F\u002F Back to T | undefined\nO.match(onNone, onSome)     \u002F\u002F Pattern match\n```\n\n## Common Patterns\n\n```typescript\nimport { pipe } from 'fp-ts\u002Ffunction'\nimport * as O from 'fp-ts\u002FOption'\n\n\u002F\u002F Safe property access\npipe(\n  O.fromNullable(user),\n  O.map(u => u.profile),\n  O.flatMap(p => O.fromNullable(p.avatar)),\n  O.getOrElse(() => '\u002Fdefault-avatar.png')\n)\n\n\u002F\u002F Array first element\nimport * as A from 'fp-ts\u002FArray'\npipe(\n  users,\n  A.head,  \u002F\u002F Option\u003CUser>\n  O.map(u => u.name),\n  O.getOrElse(() => 'No users')\n)\n```\n\n## vs Nullable\n\n```typescript\n\u002F\u002F ❌ Nullable - easy to forget checks\nconst name = user?.profile?.name ?? 'Guest'\n\n\u002F\u002F ✅ Option - explicit, composable\npipe(\n  O.fromNullable(user),\n  O.flatMap(u => O.fromNullable(u.profile)),\n  O.map(p => p.name),\n  O.getOrElse(() => 'Guest')\n)\n```\n\nUse Option when you need to **chain** operations on optional values.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,234,1754,"2026-05-16 13:18:40",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"其他","other","mdi-page-next-outline","其他类型Skill",5,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"职场发展","career","mdi-briefcase-outline","面试准备、简历优化、职业规划",4,575,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"ca6871aa-6451-4533-8cfd-8178e595fe91","1.0.0","fp-option-ref.zip",1204,"uploads\u002Fskills\u002F3db093c3-fb64-44b9-af1f-700f8a4c1805\u002Ffp-option-ref.zip","52f6e1815af61b50c1aa440e4e24ed82a069f68e15c7f57bc43625d5bff107c0","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":2401}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]