From b2eb754d306c745c3aff5ba7a99c2990e3dacc61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Fri, 17 Jan 2025 19:46:54 +0100 Subject: [PATCH 1/3] feat(inversify-code-examples): add binding example --- .../src/examples/v6/fundamentalsBindingExample.ts | 14 ++++++++++++++ .../src/examples/v7/fundamentalsBindingExample.ts | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 packages/docs/tools/inversify-code-examples/src/examples/v6/fundamentalsBindingExample.ts create mode 100644 packages/docs/tools/inversify-code-examples/src/examples/v7/fundamentalsBindingExample.ts diff --git a/packages/docs/tools/inversify-code-examples/src/examples/v6/fundamentalsBindingExample.ts b/packages/docs/tools/inversify-code-examples/src/examples/v6/fundamentalsBindingExample.ts new file mode 100644 index 00000000..66887876 --- /dev/null +++ b/packages/docs/tools/inversify-code-examples/src/examples/v6/fundamentalsBindingExample.ts @@ -0,0 +1,14 @@ +import { Container } from 'inversify'; + +interface Weapon { + damage: number; +} + +export class Katana implements Weapon { + public readonly damage: number = 10; +} + +// Begin-example +const container: Container = new Container(); +container.bind('Weapon').to(Katana).inSingletonScope(); +// End-example diff --git a/packages/docs/tools/inversify-code-examples/src/examples/v7/fundamentalsBindingExample.ts b/packages/docs/tools/inversify-code-examples/src/examples/v7/fundamentalsBindingExample.ts new file mode 100644 index 00000000..268be27e --- /dev/null +++ b/packages/docs/tools/inversify-code-examples/src/examples/v7/fundamentalsBindingExample.ts @@ -0,0 +1,14 @@ +import { Container } from 'inversify7'; + +interface Weapon { + damage: number; +} + +export class Katana implements Weapon { + public readonly damage: number = 10; +} + +// Begin-example +const container: Container = new Container(); +container.bind('Weapon').to(Katana).inSingletonScope(); +// End-example From 93655a97fcc4a0af8eedea17299431a01985dda6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Fri, 17 Jan 2025 19:47:21 +0100 Subject: [PATCH 2/3] feat(inversify-site): update binding fundamentals page --- .../inversify-site/docs/fundamentals/binding.mdx | 11 ++++++++--- .../version-6.x/fundamentals/binding.mdx | 5 +++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/docs/services/inversify-site/docs/fundamentals/binding.mdx b/packages/docs/services/inversify-site/docs/fundamentals/binding.mdx index 215cb39b..901e1aa0 100644 --- a/packages/docs/services/inversify-site/docs/fundamentals/binding.mdx +++ b/packages/docs/services/inversify-site/docs/fundamentals/binding.mdx @@ -2,15 +2,20 @@ sidebar_position: 1 title: Binding --- -import bindingScopeRequestSource from '@inversifyjs/code-examples/generated/examples/bindingScopeRequest.ts.txt'; -import bindingScopeSingletonSource from '@inversifyjs/code-examples/generated/examples/bindingScopeSingleton.ts.txt'; -import bindingScopeTransientSource from '@inversifyjs/code-examples/generated/examples/bindingScopeTransient.ts.txt'; +import bindingScopeRequestSource from '@inversifyjs/code-examples/generated/examples/v7/bindingScopeRequest.ts.txt'; +import bindingScopeSingletonSource from '@inversifyjs/code-examples/generated/examples/v7/bindingScopeSingleton.ts.txt'; +import bindingScopeTransientSource from '@inversifyjs/code-examples/generated/examples/v7/bindingScopeTransient.ts.txt'; +import fundamentalsBindingExample from '@inversifyjs/code-examples/generated/examples/v7/fundamentalsBindingExample.ts.txt'; import CodeBlock from '@theme/CodeBlock'; # Binding A binding represents the relationship between a service identifier and its resolution. Bindings are added to a container to configure it to provide services. +{fundamentalsBindingExample} + +When the binding is added to the container, the container is configured to provide a resolved value for the service identifier `Weapon` by resolving the `Katana` class. `container.bind` creates a new binding with certain properties, which are explained below. + ## Binding properties A binding has the following properties: diff --git a/packages/docs/services/inversify-site/versioned_docs/version-6.x/fundamentals/binding.mdx b/packages/docs/services/inversify-site/versioned_docs/version-6.x/fundamentals/binding.mdx index 215cb39b..8227fb50 100644 --- a/packages/docs/services/inversify-site/versioned_docs/version-6.x/fundamentals/binding.mdx +++ b/packages/docs/services/inversify-site/versioned_docs/version-6.x/fundamentals/binding.mdx @@ -5,12 +5,17 @@ title: Binding import bindingScopeRequestSource from '@inversifyjs/code-examples/generated/examples/bindingScopeRequest.ts.txt'; import bindingScopeSingletonSource from '@inversifyjs/code-examples/generated/examples/bindingScopeSingleton.ts.txt'; import bindingScopeTransientSource from '@inversifyjs/code-examples/generated/examples/bindingScopeTransient.ts.txt'; +import fundamentalsBindingExample from '@inversifyjs/code-examples/generated/examples/v6/fundamentalsBindingExample.ts.txt'; import CodeBlock from '@theme/CodeBlock'; # Binding A binding represents the relationship between a service identifier and its resolution. Bindings are added to a container to configure it to provide services. +{fundamentalsBindingExample} + +When the binding is added to the container, the container is configured to provide a resolved value for the service identifier `Weapon` by resolving the `Katana` class. `container.bind` creates a new binding with certain properties, which are explained below. + ## Binding properties A binding has the following properties: From 2b3cbc2568d445a49b5cf275c3b29a4cd1783c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Fri, 17 Jan 2025 19:47:38 +0100 Subject: [PATCH 3/3] feat(inversify-site): update binding syntax api page --- .../docs/api/binding-syntax.mdx | 276 ++++++++++-------- 1 file changed, 152 insertions(+), 124 deletions(-) diff --git a/packages/docs/services/inversify-site/docs/api/binding-syntax.mdx b/packages/docs/services/inversify-site/docs/api/binding-syntax.mdx index abeccf6c..f4f988f4 100644 --- a/packages/docs/services/inversify-site/docs/api/binding-syntax.mdx +++ b/packages/docs/services/inversify-site/docs/api/binding-syntax.mdx @@ -2,28 +2,25 @@ sidebar_position: 1 title: Binding Syntax --- -import bindingOnSyntaxApiOnActivationSource from '@inversifyjs/code-examples/generated/examples/bindingOnSyntaxApiOnActivation.ts.txt'; -import bindingToSyntaxApiToSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiTo.ts.txt'; -import bindingToSyntaxApiToAutoFactorySource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToAutoFactory.ts.txt'; -import bindingToSyntaxApiToAutoNamedFactorySource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToAutoNamedFactory.ts.txt'; -import bindingToSyntaxApiToConstantValueSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToConstantValue.ts.txt'; -import bindingToSyntaxApiToConstructorSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToConstructor.ts.txt'; -import bindingToSyntaxApiToDynamicValueSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToDynamicValue.ts.txt'; -import bindingToSyntaxApiToFactorySource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToFactory.ts.txt'; -import bindingToSyntaxApiToProviderSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToProvider.ts.txt'; -import bindingToSyntaxApiToSelfSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToSelf.ts.txt'; -import bindingToSyntaxApiToServiceSource from '@inversifyjs/code-examples/generated/examples/bindingToSyntaxApiToService.ts.txt'; -import bindingWhenSyntaxApiWhenSource from '@inversifyjs/code-examples/generated/examples/bindingWhenSyntaxApiWhen.ts.txt'; +import bindingOnSyntaxApiOnActivationSource from '@inversifyjs/code-examples/generated/examples/v7/bindingOnSyntaxApiOnActivation.ts.txt'; +import bindingToSyntaxApiToSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiTo.ts.txt'; +import bindingToSyntaxApiToConstantValueSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToConstantValue.ts.txt'; +import bindingToSyntaxApiToDynamicValueSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToDynamicValue.ts.txt'; +import bindingToSyntaxApiToFactorySource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToFactory.ts.txt'; +import bindingToSyntaxApiToProviderSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToProvider.ts.txt'; +import bindingToSyntaxApiToSelfSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToSelf.ts.txt'; +import bindingToSyntaxApiToServiceSource from '@inversifyjs/code-examples/generated/examples/v7/bindingToSyntaxApiToService.ts.txt'; +import bindingWhenSyntaxApiWhenSource from '@inversifyjs/code-examples/generated/examples/v7/bindingWhenSyntaxApiWhen.ts.txt'; import CodeBlock from '@theme/CodeBlock'; # Binding Syntax Binding syntax is provided as a fluent interface resulting from using the [container API](/docs/api/container#bind) or the [container module API](/docs/api/container-module#bind). -## BindingToSyntax +## BindToFluentSyntax ```ts -interface BindingToSyntax { +interface BindToFluentSyntax { // ... } ``` @@ -39,7 +36,7 @@ Further documentation refers to this service identifier as the "given service id ### to ```ts -to(constructor: interfaces.Newable): interfaces.BindingInWhenOnSyntax; +to(type: Newable): BindInWhenOnFluentSyntax; ``` Binds a class instantiation to the given service binding. Whenever the service is resolved, the class constructor will be invoked to build the resolved value. @@ -49,7 +46,7 @@ Binds a class instantiation to the given service binding. Whenever the service i ### toSelf ```ts -toSelf(): interfaces.BindingInWhenOnSyntax; +toSelf(): BindInWhenOnFluentSyntax; ``` If the given service identifier is a class, establish a type binding to that class. @@ -59,7 +56,7 @@ If the given service identifier is a class, establish a type binding to that cla ### toConstantValue ```ts -toConstantValue(value: T): interfaces.BindingWhenOnSyntax; +toConstantValue(value: T): BindWhenOnFluentSyntax; ``` Binds a value in singleton scope to the given service identifier. @@ -69,10 +66,10 @@ Binds a value in singleton scope to the given service identifier. ### toDynamicValue ```ts -toDynamicValue(func: interfaces.DynamicValue): interfaces.BindingInWhenOnSyntax; +toDynamicValue(builder: DynamicValueBuilder): BindInWhenOnFluentSyntax; ``` -Binds a function to the given service id. Whenever the service is resolved, the function passed will be invoked to build the resolved value. +Binds a function to the given service identifier. Whenever the service is resolved, the function passed will be invoked to build the resolved value. :::info @@ -82,58 +79,28 @@ Keep in mind a service is not resolved if it's cached in the current scope. {bindingToSyntaxApiToDynamicValueSource} -### toConstructor - -```ts -toConstructor(constructor: interfaces.Newable): interfaces.BindingWhenOnSyntax; -``` - -Binds a class to the given service id. Whenever the service is resolved, the class constructor will be passed as the resolved value. - -{bindingToSyntaxApiToConstructorSource} - ### toFactory ```ts -toFactory(factory: interfaces.FactoryCreator): interfaces.BindingWhenOnSyntax; +toFactory( + factory: T extends Factory + ? (context: ResolutionContext) => T + : never, +): BindWhenOnFluentSyntax; ``` Binds a factory to the given service identifier. Whenever the service is resolved, the factory will be passed as the resolved value. {bindingToSyntaxApiToFactorySource} -### toFunction - -```ts -toFunction(func: T): interfaces.BindingWhenOnSyntax; -``` - -An alias of `BindingToSyntax.toConstantValue` restricted to functions. - -### toAutoFactory - -```ts -toAutoFactory(serviceIdentifier: interfaces.ServiceIdentifier): interfaces.BindingWhenOnSyntax; -``` - -Binds a factory of services associated with a target service identifier to the given service identifier. - -{bindingToSyntaxApiToAutoFactorySource} - -### toAutoNamedFactory - -```ts -toAutoNamedFactory(serviceIdentifier: interfaces.ServiceIdentifier): BindingWhenOnSyntax; -``` - -Binds a factory of services associated with a target service identifier and a name to the given service identifier. - -{bindingToSyntaxApiToAutoNamedFactorySource} - ### toProvider ```ts -toProvider(provider: interfaces.ProviderCreator): interfaces.BindingWhenOnSyntax; +toProvider( + provider: T extends Provider + ? (context: ResolutionContext) => T + : never, +): BindWhenOnFluentSyntax; ``` Binds a provider of services associated with a target service identifier to the given service identifier. A provider is just an asynchronous factory. @@ -143,17 +110,17 @@ Binds a provider of services associated with a target service identifier to the ### toService ```ts -toService(service: interfaces.ServiceIdentifier): void; +toService(service: ServiceIdentifier): void; ``` Binds the services bound to a target service identifier to the given service identifier. {bindingToSyntaxApiToServiceSource} -## BindingInSyntax +## BindInFluentSyntax ```ts -interface BindingInSyntax { +interface BindInFluentSyntax { // ... } ``` @@ -163,7 +130,7 @@ Represents a service binding given a service identifier and a service resolution ### inSingletonScope ```ts -inSingletonScope(): BindingWhenOnSyntax; +inSingletonScope(): BindWhenOnFluentSyntax; ``` Sets the binding scope to singleton. Refer to the [docs](/docs/fundamentals/binding#singleton) for more information. @@ -171,7 +138,7 @@ Sets the binding scope to singleton. Refer to the [docs](/docs/fundamentals/bind ### inTransientScope ```ts -inTransientScope(): BindingWhenOnSyntax; +inTransientScope(): BindWhenOnFluentSyntax; ``` Sets the binding scope to transient. Refer to the [docs](/docs/fundamentals/binding#transient) for more information. @@ -179,15 +146,15 @@ Sets the binding scope to transient. Refer to the [docs](/docs/fundamentals/bind ### inRequestScope ```ts -inRequestScope(): BindingWhenOnSyntax; +inRequestScope(): BindWhenOnFluentSyntax; ``` Sets the binding scope to request. Refer to the [docs](/docs/fundamentals/binding#request) for more information. -## BindingOnSyntax +## BindOnFluentSyntax ```ts -interface BindingOnSyntax { +interface BindOnFluentSyntax { // ... } ``` @@ -197,7 +164,7 @@ Allows setting binding activation and deactivation handlers. ### onActivation ```ts -onActivation(fn: (context: Context, injectable: T) => T | Promise): BindingWhenSyntax; +onActivation(activation: BindingActivation): BindWhenFluentSyntax; ``` Sets a binding activation handler. The activation handler is invoked after a dependency has been resolved and before it is added to a scope cache. The activation handler will not be invoked if the dependency is taken from a scope cache. @@ -207,15 +174,15 @@ Sets a binding activation handler. The activation handler is invoked after a dep ### onDeactivation ```ts -onDeactivation(fn: (injectable: T) => void | Promise): BindingWhenSyntax; +onDeactivation(deactivation: BindingDeactivation): BindWhenFluentSyntax; ``` Sets a binding deactivation handler on a singleton scope binding. The deactivation handler is called when the binding is unbound from a container. -## BindingWhenSyntax +## BindWhenFluentSyntax ```ts -interface BindingWhenSyntax { +interface BindWhenFluentSyntax { // ... } ``` @@ -227,141 +194,202 @@ Allows setting binding constraints. Sets a constraint for the current binding. ```ts -when(constraint: (request: Request) => boolean): BindingOnSyntax; +when( + constraint: (metadata: BindingMetadata) => boolean, +): BindOnFluentSyntax; ``` {bindingWhenSyntaxApiWhenSource} In the previous example, a custom constraint is implemented to use the binding if and only if the target name is a certain one. -### whenTargetNamed +### whenAnyAncestor + +```ts +whenAnyAncestor( + constraint: (metadata: BindingMetadata) => boolean, +): BindOnFluentSyntax; +``` -Constrains the binding to be used if and only if the target name is a certain one. +Constrains the binding to be used if and only if, given a constraint, any ancestor service matches the given constraint. + +### whenAnyAncestorIs ```ts -whenTargetNamed(name: string | number | symbol): BindingOnSyntax; +whenAnyAncestorIs( + serviceIdentifier: ServiceIdentifier, +): BindOnFluentSyntax; ``` -### whenTargetIsDefault +Constrains the binding to be used if and only if, given a service identifier, any ancestor service was requested with the given identifier. + +### whenAnyAncestorNamed ```ts -whenTargetIsDefault(): BindingOnSyntax; +whenAnyAncestorNamed(name: MetadataName): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if the target has no name nor tags. +Constrains the binding to be used if and only if, given a name, a named parent service was requested with the given name. -### whenTargetTagged +### whenAnyAncestorTagged ```ts -whenTargetTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax; +whenAnyAncestorTagged( + tag: MetadataTag, + tagValue: unknown, +): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if the target tag is a certain one. +Constrains the binding to be used if and only if, given a tag, a tagged parent service was requested with the given tag. -### whenInjectedInto +### whenDefault ```ts -whenInjectedInto(parent: NewableFunction | string): BindingOnSyntax; +whenDefault(): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if the parent target service identifier is a certain one. +Constrains the binding to be used if and only if the service is not requested with any name nor tags. -### whenParentNamed +### whenNamed + +Constrains the binding to be used if and only if, given a name, a named service is requested with the given name. ```ts -whenParentNamed(name: string | number | symbol): BindingOnSyntax; +whenNamed(name: MetadataName): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if the parent target name is a certain one. +### whenNoAncestor -### whenParentTagged +```ts +whenNoAncestor( + constraint: (metadata: BindingMetadata) => boolean, +): BindOnFluentSyntax; +``` + +Constrains the binding to be used if and only if, given a constraint, no ancestor service matches the given constraint. + +### whenNoAncestorIs ```ts -whenParentTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax; +whenNoAncestorIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if the parent target tag is a certain one. +Constrains the binding to be used if and only if, given a service identifier, no ancestor service was requested with the given identifier. -### whenAnyAncestorIs +### whenNoAncestorNamed ```ts -whenAnyAncestorIs(ancestor: NewableFunction | string): BindingOnSyntax; +whenNoAncestorNamed(name: MetadataName): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if any ancestor target service identifier is a certain one. +Constrains the binding to be used if and only if, given a name, no ancestor service was requested with the given name. -### whenNoAncestorIs +### whenNoAncestorTagged ```ts -whenNoAncestorIs(ancestor: NewableFunction | string): BindingOnSyntax; +whenNoAncestorTagged( + tag: MetadataTag, + tagValue: unknown, +): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if no ancestor target service identifier is a certain one. +Constrains the binding to be used if and only if, given a tag, no ancestor service was requested with the given tag. -### whenAnyAncestorNamed +### whenNoParent ```ts -whenAnyAncestorNamed(name: string | number | symbol): BindingOnSyntax; +whenNoParent( + constraint: (metadata: BindingMetadata) => boolean, +): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if any ancestor target name is a certain one. +Constrains the binding to be used if and only if, given a constraint, no parent service matches the given constraint. -### whenAnyAncestorTagged +### whenNoParentIs ```ts -whenAnyAncestorTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax; +whenNoParentIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if any ancestor target tag is a certain one. +Constrains the binding to be used if and only if, given a service identifier, no parent service was requested with the given identifier. -### whenNoAncestorNamed +### whenNoParentNamed ```ts -whenNoAncestorNamed(name: string | number | symbol): BindingOnSyntax; +whenNoParentNamed(name: MetadataName): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if no ancestor target name is a certain one. +Constrains the binding to be used if and only if, given a name, no parent service was requested with the given name. -### whenNoAncestorTagged +### whenNoParentTagged + +```ts +whenNoParentTagged( + tag: MetadataTag, + tagValue: unknown, +): BindOnFluentSyntax; +``` + +Constrains the binding to be used if and only if, given a tag, no parent service was requested with the given tag. + +### whenParent + +```ts +whenParent( + constraint: (metadata: BindingMetadata) => boolean, +): BindOnFluentSyntax; +``` + +Constrains the binding to be used if and only if, given a constraint, the parent service matches the given constraint. + +### whenParentIs + +```ts +whenParentIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax; +``` + +Constrains the binding to be used if and only if, given a service identifier, the parent service was requested with the given identifier. + +### whenParentNamed ```ts -whenNoAncestorTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax; +whenParentNamed(name: MetadataName): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if no ancestor target tag is a certain one. +Constrains the binding to be used if and only if, given a name, the parent service was requested with the given name. -### whenAnyAncestorMatches +### whenParentTagged ```ts -whenAnyAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax; +whenParentTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if any ancestor matches a certain constraint. +Constrains the binding to be used if and only if, given a tag, the parent service was requested with the given tag. -### whenNoAncestorMatches +### whenTagged ```ts -whenNoAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax; +whenTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax; ``` -Constrains the binding to be used if and only if no ancestor matches a certain constraint. +Constrains the binding to be used if and only if, given a tag, a tagged service is requested with the given tag. -## BindingWhenOnSyntax +## BindWhenOnFluentSyntax -The union of [BindingWhenSyntax](#bindingwhensyntax) and [BindingOnSyntax](#bindingonsyntax). +The union of [BindWhenFluentSyntax](#bindwhenfluentsyntax) and [BindOnFluentSyntax](#bindonfluentsyntax). ```ts -export interface BindingWhenOnSyntax - extends BindingWhenSyntax, - BindingOnSyntax {} +export interface BindWhenOnFluentSyntax + extends BindWhenFluentSyntax, + BindOnFluentSyntax {} ``` -## BindingInWhenOnSyntax +## BindInWhenOnFluentSyntax -The union of [BindingInSyntax](#bindinginsyntax) and [BindingWhenOnSyntax](#bindingwhenonsyntax). +The union of [BindInFluentSyntax](#bindinfluentsyntax) and [BindWhenOnFluentSyntax](#bindwhenonfluentsyntax). ```ts -export interface BindingInWhenOnSyntax - extends BindingInSyntax, - BindingWhenOnSyntax {} +export interface BindInWhenOnFluentSyntax + extends BindInFluentSyntax, + BindWhenOnFluentSyntax {} ``` \ No newline at end of file