UNPKG

wechat-emojis

Version:

完整的微信内置表情资源库,包含 109 个高清 PNG 图片和类型安全的 TypeScript API

229 lines (168 loc) 5.05 kB
# 微信表情包 TypeScript API 文档 ## 概述 `wechatEmoji.ts` 提供了完整的 TypeScript 支持,让你可以类型安全地访问微信表情包资源。 ## 安装和使用 ### 1. 通过 NPM 安装(推荐) ```bash # 安装包 npm install wechat-emojis # 复制表情资源到项目的 public 目录(重要) mkdir -p public/assets cp -r node_modules/wechat-emojis/assets/* public/assets/ ``` 使用 NPM 包: ```typescript import WeChatEmojis, { EmojiCategory, getEmojiPath, getEmojisByCategory, searchEmojis } from 'wechat-emojis'; ``` ### 2. 直接使用 TypeScript 源文件 ```typescript import WeChatEmojis, { EmojiCategory, getEmojiPath, getEmojisByCategory, searchEmojis } from './wechatEmoji'; ``` ### 3. 编译后使用 JavaScript ```bash # 编译 TypeScript npx tsc wechatEmoji.ts --target es2017 --module commonjs # 在 Node.js 中使用 const { getEmojiPath, EmojiCategory } = require('./wechatEmoji.js'); ``` ## API 参考 ### 类型定义 #### `EmojiCategory` 枚举 ```typescript enum EmojiCategory { FACE = 'face', // 人脸表情 GESTURE = 'gesture', // 手势表情 ANIMAL = 'animal', // 动物表情 BLESSING = 'blessing', // 祝福表情 OTHER = 'other' // 其他表情 } ``` #### `EmojiInfo` 接口 ```typescript interface EmojiInfo { name: string; // 表情名称 category: EmojiCategory; // 表情类别 path: string; // 图片文件路径 englishName?: string; // 英文名称(可选) } ``` #### `EmojiName` 类型 包含所有有效表情名称的联合类型,提供编译时类型检查。 ### 核心函数 #### `getEmojiPath(name: EmojiName): string | null` 获取表情图片路径。 ```typescript const path = getEmojiPath('微笑'); // 'assets/face/微笑.png' const invalid = getEmojiPath('不存在'); // null ``` #### `getEmojiInfo(name: EmojiName): EmojiInfo | null` 获取表情详细信息。 ```typescript const emoji = getEmojiInfo('微笑'); // { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' } ``` #### `getEmojisByCategory(category: EmojiCategory): EmojiInfo[]` 按类别获取表情列表。 ```typescript const faceEmojis = getEmojisByCategory(EmojiCategory.FACE); console.log(`人脸表情数量: ${faceEmojis.length}`); // 75 ``` #### `getAllEmojis(): EmojiInfo[]` 获取所有表情信息。 ```typescript const allEmojis = getAllEmojis(); console.log(`总表情数量: ${allEmojis.length}`); // 109 ``` #### `searchEmojis(keyword: string): EmojiInfo[]` 搜索包含关键词的表情。 ```typescript const laughEmojis = searchEmojis('笑'); // 返回包含 '微笑', '偷笑', '坏笑' 等的表情 ``` #### `hasEmoji(name: string): name is EmojiName` 检查表情是否存在(类型守卫)。 ```typescript if (hasEmoji('微笑')) { // TypeScript 知道这里 '微笑' 是有效的 EmojiName const path = getEmojiPath('微笑'); } ``` #### `getEmojiNames(category?: EmojiCategory): string[]` 获取表情名称列表。 ```typescript const allNames = getEmojiNames(); const faceNames = getEmojiNames(EmojiCategory.FACE); ``` #### `getRandomEmoji(category?: EmojiCategory): EmojiInfo` 随机获取表情。 ```typescript const randomEmoji = getRandomEmoji(); const randomFaceEmoji = getRandomEmoji(EmojiCategory.FACE); ``` ## 使用示例 ### React 组件示例 ```typescript import React from 'react'; import { getEmojiPath, getEmojisByCategory, EmojiCategory } from 'wechat-emojis'; const EmojiPicker: React.FC = () => { const faceEmojis = getEmojisByCategory(EmojiCategory.FACE); return ( <div className="emoji-picker"> {faceEmojis.map(emoji => ( <img key={emoji.name} src={getEmojiPath(emoji.name)} alt={emoji.name} title={emoji.name} className="emoji-item" onClick={() => console.log(`选择了: ${emoji.name}`)} /> ))} </div> ); }; ``` ### Vue 组件示例 ```vue <template> <div class="emoji-grid"> <img v-for="emoji in emojis" :key="emoji.name" :src="getEmojiPath(emoji.name)" :alt="emoji.name" :title="emoji.name" @click="selectEmoji(emoji)" /> </div> </template> <script setup lang="ts"> import { getEmojisByCategory, getEmojiPath, EmojiCategory } from 'wechat-emojis'; const emojis = getEmojisByCategory(EmojiCategory.FACE); const selectEmoji = (emoji: EmojiInfo) => { console.log(`选择了表情: ${emoji.name}`); }; </script> ``` ## 数据统计 - **总表情数量**: 109 个 - **人脸表情**: 75 个 - **手势表情**: 10 个 - **动物表情**: 4 个 - **祝福表情**: 7 个 - **其他表情**: 13## 注意事项 1. **类型安全**: 使用 `EmojiName` 类型可以在编译时检查表情名称的有效性 2. **路径相对性**: 返回的路径是相对于项目根目录的 3. **兼容性**: 编译目标为 ES2017,兼容现代浏览器和 Node.js 4. **性能**: 所有数据在模块加载时预计算,查询性能优秀