MetaMessage已支持TypeScript
【摘要】 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)