@fluidframework/synthesize

中文文档
3.12.0发布于 2026/11/11MITTypeScriptES Module近 30 天下载 6.2万

用于合成范围对象的库.

中文使用文档
文档目录23 节
  1. 使用 Fluid 框架库
  2. 安装
  3. 从此软件包导入
  4. API 文档
  5. 简单示例
  6. 流体对象提供者
  7. 数值提供者
  8. Async 值提供者
  9. 工厂供应商
  10. Async 工厂提供者
  11. 合成大小
  12. 可选类型
  13. 所需类型
  14. 多种类型
  15. 家长
  16. 客户最低要求
  17. 支持的运行时间
  18. 支持的工具
  19. 模块分辨率
  20. 模块格式
  21. 贡献准则
  22. 帮助
  23. 商标

@ fluidframework/ 合成大小

基于 Fluid 对象提供者合成流体对象的 Ioc 类型库 .

使用 Fluid 框架库

对于依赖流体框架库的公共API,我们建议 ^ (caret)版本范围. 例如,使用 ^1.3.4。 。 。 .

依赖不稳定的API,例如: beta API,我们推荐一个更具限制性的版本范围. 例如,使用一个 ~ 版本范围.

安装

运行此命令以安装软件包 :

npm i @fluidframework/synthesize

从此软件包导入

此软件包使用 packet.json 导出 通过支持级别将API分离. 有关支助保障的信息改为: API 支持级别。 。 。 .

导入 public API 从 @fluidframework/synthesize。 。 。 .

导入 legacy API 从 @fluidframework/synthesize/legacy。 。 。 .

API 文档

读取 @ fluidframework/ 合成大小 API 文档 https://fluidframework.com/docs/apis/synthesize (中文(简体) )。 。 。 .

它允许创建一个 DependencyContainer 可以在其中注册流体对象 基于其界面符号。 所以,举例来说,如果我想注册的东西 IFoo 我会 需要提供和执行对象 IFoo 并肩作战.

这个 DependencyContainer 也暴露出一个 synthesize 将对象与 Promise 页:1 更正所请求的可选和需要的符号.

所以,如果我想要一个对象 与可选 IFoo 和所需数额 IBar 我会回来的:

{
    IFoo: Promise<IFoo | undefined>;
    IBar: Promise<IBar>;
}

简单示例

const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();
dc.register(IFoo, new Foo());

const s = dc.synthesize({IFoo}, {});
const foo = await s.IFoo;
console.log(s.IFoo?.foo;)

API 密码

流体对象提供者

流体对象提供者是您在注册时返回流体对象的不同方式 .

供应商有四种类型:

  1. Value Provider
  2. Async Value Provider
  3. Factory Provider
  4. Async Factory Provider
type FluidObjectProvider<T> =
    | NonNullable<T>
    | Promise<NonNullable<T>>
    | ((dependencyContainer: IFluidDependencySynthesizer) => NonNullable<T>)
    | ((dependencyContainer: IFluidDependencySynthesizer) => Promise<NonNullable<T>>);

数值提供者

提供特定类型的流体对象.

使用量

const dc = new DependencyContainer<FluidObject<IFoo>>();

dc.register(IFoo, new Foo());

Async 值提供者

向特定类型的流体对象提供承诺.

使用量

const dc = new DependencyContainer<FluidObject<IFoo>>();

const generateFoo: Promise<IFoo> = await() => {
    const foo = new Foo();
    await foo.initialize();
    return foo;
}

dc.register(IFoo, generateFoo());

工厂供应商

提供解决特定类型流体对象的函数.

使用量

const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();
const fooFactory = () => new Foo();
dc.register(IFoo, fooFactory);

// Factories can utilize the DependencyContainer if the FluidObject depends
// on other providers
const barFactory = (dc) => new Bar(dc);
dc.register(IFoo, barFactory);

Async 工厂提供者

提供将解决对特定类型流体对象的承诺的函数.

使用量

const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();

const generateFoo: Promise<IFoo> = await() => {
    const foo = new Foo();
    await foo.initialize();
    return foo;
}

dc.register(IFoo, generateFoo);

const generateBar: Promise<IBar> = await(dc) => {
    const bar = new Bar();
    await bar.initialize(dc);
    return bar;
}

dc.register(IBar, generateBar);

合成大小

一旦你有一个 DependencyContainer 拥有注册提供者,您可以合成/生成一个新的流体对象 从它。 返回的对象将拥有可选和需要类型的正确打入.

示例

如果我想要一个可选的对象 IFoo 和所需数额 IBar 我会回来的:

{
    IFoo: Promise<IFoo | undefined>;
    IBar: Promise<IBar>;
}

synthesize 带 optionalTypes 财务报告和审定财务报表 requiredTypes 及其相应的类型. FluidObjectSymbolProvider<> 是类型脚本 type 确保所传递的类型与所提供对象中的类型相匹配.

可选类型

可选类型会返回一个承诺, 它相应的流体对象或未定义 。 因此,我们必须这样做 如果选中可以验证对象或使用 ? 就像下面的例子一样.

const dc = new DependencyContainer<FluidObject<IFoo>>();

const s = dc.synthesize<IFoo>({ IFoo }, {});
const foo = await s.IFoo;
console.log(foo?.foo);

注意: 由于 TypeScript 中的通称如何工作, 我们需要提供空 requiredTypes 尽管我们没有 需要提供类型.

所需类型

所需的类型会返回一个承诺 它相应的流体对象 或者它会扔出.

你可以看到下面,我们不需要添加 ? 检查我们要求的类型.

const dc = new DependencyContainer<FluidObject<IFoo>>();

const scope = dc.synthesize<{}, IFoo>({}, { IFoo });
const foo = await s.IFoo;
console.log(foo.foo);

多种类型

您可以使用 & 或创建单独的类型.

const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();

const scope = dc.synthesize<IFoo & IBar>({ IFoo, IBar }, {});
const fooP = s.IFoo;
const barP = s.IBar;
const [foo, bar] = Promise.all([foo, bar]);
console.log(foo?.foo);
console.log(bar?.bar);
const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();

const scope = dc.synthesize<{}, IFoo & IBar>({}, { IFoo, IBar });
const fooP = s.IFoo;
const barP = s.IBar;
const [foo, bar] = Promise.all([foo, bar]);
console.log(foo.foo);
console.log(bar.bar);
const dc = new DependencyContainer<FluidObject<IFoo & IBar>>();

const scope = dc.synthesize<IFoo, IBar>({ IFoo }, { IBar });
const fooP = s.IFoo;
const barP = s.IBar;
const [foo, bar] = Promise.all([foo, bar]);
console.log(foo?.foo);
console.log(bar.bar);

家长

这个 DependencyContainer 使用一个可选参数,即 parent当解决提供者时 DependencyContainer 将先 检查当前容器,然后查看母容器.

客户最低要求

Fluid框架客户端库支持此文档中的平台. 这些要求有意具有限制性. 在一个主要的版本系列中,我们可以放松这些要求,但我们不能使其更严格. 对于长期支持(LTS)版本,我们可能需要支持这些平台几年.

其他配置可以奏效,但Fluid框架不支持. 如果一个不支持的配置停止工作, 我们不会将此归类为错误 . 要请求支持未列出的配置, 请存档 . 产品组会评估你的要求. 在此问题上,请具体说明配置的现状:

  • 配置有效但需要官方支持.
  • 配置不起作用,需要更改.

支持的运行时间

  • Fluid框架支持节点.js版本22和24同时收到 上游支助。 。 。 .
  • Fluid框架支持支持ES2022标准库的现代浏览器.

支持的工具

  • 类型脚本 6.0数字 :
    • 流体框架支持全部 strict 选项.
    • 设定建设目标(lib, (中文(简体) ), target改为: ES2022 或后会.
    • 启用 strictNullChecks。 。 。 .
    • 流体框架不支持 在 TypeScript 6.0 中贬值的配置选项。 。 。 .
    • 流体框架不完全支持 exactOptionalPropertyTypes。 。 。 . 如果您启用此选项, 请不要使用 in, (中文(简体) ), Reflect.has, (中文(简体) ), Object.hasOwn,或 Object.prototype.hasOwnProperty 改为Fluid框架类型的窄成员. 这些方法可以错误地排除 undefined 从可能的值.
  • 网络软件包 页:1
    • 我们不需要一个特定的捆绑者. 其他处理ES模块的捆绑机可以工作,但我们只积极测试网页包.

模块分辨率

在类型脚本中 compilerOptions,使用时 Node16, (中文(简体) ), Node20, (中文(简体) ), NodeNext,或 Bundler 模块分辨率. 这些设置遵循 节点.js v12+无害环境管理 分辨率和加载算法。 。 。 .

不使用 Node10 模块分辨率.

模块格式

  • ES模块: 使用ES模块来消耗Fluid框架客户端软件包,包括在Node.js中.
  • 常见JS : Fluid Framework在3.0版本或后期不正式支持CommonJS.

贡献准则

你们可以 贡献 通过这些方式实现流体框架:

详细指示改为: repo 文档。 。 。 .

本项目遵循 Microsoft 开源行为守则。 。 。 . 更多信息,改为: 《行为守则》经常被问到的问题。 。 。 . 问题或评论,联系 打开码@ microsoft.com。 。 。 .

这个项目可能包含微软项目的商标或标志,产品,或服务. 这些商标或标志的使用必须遵循微软 商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.

帮助

读取 流体框架文件 用于了解流体框架概念和API.

要求提供文件未载列的资料, 创建问题。 。 。 .

商标

这个项目可能包含微软项目的商标或标志,产品,或服务.

这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .

在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.

版本与发布记录

@fluidframework/synthesize 共发布 695 个版本,首次发布于 2020/09/01;过去 12 个月发布了 48 个版本。

版本发布日期距今
3.12.0latest2026/11/114 天前
3.11.02026/11/0411 天前
3.10.02026/11/0411 天前
3.7.02026/10/2719 天前
3.6.02026/10/2026 天前
3.5.02026/10/131 个月前

其他发布通道:next → 2.0.0-dev-rc.1.0.0.225277,canary → 2.0.0-internal.8.0.8,dev → 2.116.0-416006,rc → 2.118.1。

关于 @fluidframework/synthesize 的常见问题

@fluidframework/synthesize 是什么?

用于合成范围对象的库.

如何安装 @fluidframework/synthesize?

在项目目录运行 npm install @fluidframework/synthesize,或使用 pnpm add / yarn add / bun add。

@fluidframework/synthesize 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fluidframework/synthesize 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fluidframework/synthesize 可以商用吗?

@fluidframework/synthesize 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fluidframework/synthesize 的下载量有多少?

根据 npm 官方下载统计,@fluidframework/synthesize 在 2026/10/15 – 2026/11/13 这 30 天内被下载 62,488 次,日均约 2,083 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fluidframework/synthesize 还在维护吗?

最新版本 3.12.0 发布于 2026/11/11(4 天前);至今共发布 695 个版本,其中过去 12 个月发布了 48 个;首次发布于 2020/09/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。