/** * 对于包含 emoji 字符的字符串, 不能通过 `split("")`, 数组索引等方式截取字符. * * 可以使用第三方库 `grapheme-splitter` 或 {@link Intl.Segmenter} API. 但其都有自身的限制. * 1. `grapheme-splitter` 要在项目中引入额外的文件大小. * 2. {@link Intl.Segmenter} API 较新, 在部分浏览器不支持. * 因此内部提供这两种方式的适配器, 根据需求选择. * * * @example "Hello" => ["H", "e", "l", "l", "o"] * @example "😀Hello" => ["😀", "H", "e", "l", "l", "o"] * * @see https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a * @see https://mathiasbynens.be/notes/javascript-unicode * @see https://cestoliv.com/blog/how-to-count-emojis-with-javascript/ * */ export interface StringAdapter { stringToChars(value: string): string[]; }