```js // @noErrors import { createAttachmentKey, fromAction } from 'svelte/attachments'; ``` ## createAttachmentKey <blockquote class="since note"> Available since 5.29 </blockquote> Creates an object key that will be recognised as an attachment when the object is spread onto an element, as a programmatic alternative to using `{@attach ...}`. This can be useful for library authors, though is generally not needed when building an app. ```svelte <script> import { createAttachmentKey } from 'svelte/attachments'; const props = { class: 'cool', onclick: () => alert('clicked'), [createAttachmentKey()]: (node) => { node.textContent = 'attached!'; } }; </script> <button {...props}>click me</button> ``` <div class="ts-block"> ```dts function createAttachmentKey(): symbol; ``` </div> ## fromAction Converts an [action](/docs/svelte/use) into an [attachment](/docs/svelte/@attach) keeping the same behavior. It's useful if you want to start using attachments on components but you have actions provided by a library. Note that the second argument, if provided, must be a function that _returns_ the argument to the action function, not the argument itself. ```svelte <!-- with an action --> <div use:foo={bar}>...</div> <!-- with an attachment --> <div {@attach fromAction(foo, () => bar)}>...</div> ``` <div class="ts-block"> ```dts function fromAction< E extends EventTarget, T extends unknown >( action: | Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>), fn: () => T ): Attachment<E>; ``` </div> <div class="ts-block"> ```dts function fromAction<E extends EventTarget>( action: | Action<E, void> | ((element: E) => void | ActionReturn<void>) ): Attachment<E>; ``` </div> ## Attachment An [attachment](/docs/svelte/@attach) is a function that runs when an element is mounted to the DOM, and optionally returns a function that is called when the element is later removed. It can be attached to an element with an `{@attach ...}` tag, or by spreading an object containing a property created with [`createAttachmentKey`](/docs/svelte/svelte-attachments#createAttachmentKey). <div class="ts-block"> ```dts interface Attachment<T extends EventTarget = Element> {/*…*/} ``` <div class="ts-block-property"> ```dts (element: T): void | (() => void); ``` <div class="ts-block-property-details"></div> </div></div>