@ 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 密码
流体对象提供者
流体对象提供者是您在注册时返回流体对象的不同方式 .
供应商有四种类型:
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同时收到 上游支助。 。 。 .
- 流体框架将停止支持第22版 当上游支持于2027-04-30结束时。 。 。 .
- 流体框架不支持节点.js与
--no-experimental-fetch旗帜.
- 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.
要求提供文件未载列的资料, 创建问题。 。 。 .
商标
这个项目可能包含微软项目的商标或标志,产品,或服务.
这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .
在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.