MetaMessage已支持TypeScript

举报
大漠孤煙 发表于 2026/05/15 19:06:06 2026/05/15
【摘要】 MetaMessage已支持TypeScriptMetaMessage作為AI時代的全新協議,既實現了二進制緊湊編碼,同時保留了文本可讀性,是替代json、protobuf、messagepack等序列化工具的完美選擇。MetaMessage的架構保證了跨語言的語意一致性,理論上實現了真正的跨語言。json、messagepack各語言間實現不一致,類型不一致,數據範圍也不一致。proto...

MetaMessage已支持TypeScript

MetaMessage作為AI時代的全新協議,既實現了二進制緊湊編碼,同時保留了文本可讀性,是替代json、protobuf、messagepack等序列化工具的完美選擇。

MetaMessage的架構保證了跨語言的語意一致性,理論上實現了真正的跨語言。json、messagepack各語言間實現不一致,類型不一致,數據範圍也不一致。protobuf外置schema,交換困難、更新困難,靈活度不足。而MetaMessage完全解決了以上問題。

最新的TypeScript已經支持了裝飾器且默認開啟,方便我們更好地使用MetaMessage。

使用起來非常簡單:

安裝

npm i metamessage@latest

使用

import { encodeFromValue, decodeToValue, mm, ValueType } from 'metamessage';

@mm({ desc: '用户' })
class User {
  @mm({ type: ValueType.Int64, desc: '用户ID', nullable: false })
  id: bigint = 0n;
  @mm({ desc: '昵称' })
  name: string = '';
  @mm({ type: ValueType.Uint8 })
  age: number = 0;
}

const u = new User();
u.id = 666n;
u.name = 'abc';
u.age = 20;

const wire = encodeFromValue(u);
console.log('wire', wire);

const decoded = decodeToValue(wire, User);
console.log('decoded:', decoded);

簡單解釋下,在類和字段上可以增加一個註解,附帶額外信息,比如一個數字類型默認是int,為了表達int64就可以type: ValueType.Int64。如果是string/bool等可以根據字面量推斷出來的,就可以省略。這樣,數據就可以攜帶類型了。

推薦增加描述desc: '用户ID',可以讓調用者輕鬆知道這個字段的意義,特別是方便AI理解,又省了文檔。

除了從語言的數據對象獲取數據,也可以直接使用文本格式,目前支持了jsonc

import { encodeFromJSONC, decodeToJSONC } from 'metamessage';

const jsonc = `
        // mm: desc="用户"
        {
        
                // mm: type=i64; desc="用户ID"
                "id": 666,
        
                // mm: desc="昵称"
                "name": "abc",
        
                // mm: type=u8
                "age": 20,
        }
`
const wire = encodeFromJSONC(jsonc);
const jsoncString = decodeToJSONC(wire);
console.log('JSONC:', jsoncString);
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。