# ObservableSetEvent

typedef

Fired when a property value is going to be set but is not set yet (before the `change` event is fired).

You can control the final value of the property by using the [event's `return` property](module_utils_eventinfo-EventInfo.md#member-return).

```typescript
observable.set( 'prop', 1 );

observable.on<ObservableSetEvent<number>>( 'set:prop', ( evt, propertyName, newValue, oldValue ) => {
	console.log( `Value is going to be changed from ${ oldValue } to ${ newValue }` );
	console.log( `Current property value is ${ observable[ propertyName ] }` );

	// Let's override the value.
	evt.return = 3;
} );

observable.on<ObservableChangeEvent<number>>( 'change:prop', ( evt, propertyName, newValue, oldValue ) => {
	console.log( `Value has changed from ${ oldValue } to ${ newValue }` );
} );

observable.prop = 2; // -> 'Value is going to be changed from 1 to 2'
					 // -> 'Current property value is 1'
					 // -> 'Value has changed from 1 to 3'
```

**Note:** The event is fired even when the new value is the same as the old value.

[See source](https://github.com/ckeditor/ckeditor5/blob/master/packages/ckeditor5-utils/src/observablemixin.ts#L1228)

<a id="type-parameters">

## Type parameters

### `TValue: any`

<a id="properties">

## Properties

<a id="member-args">

### `args: [ name: string, value: TValue, oldValue: TValue ]`

<a id="member-name">

### `` name: 'set' | `set:${ string }` ``

<a id="member-return">

### `return: TValue`

#### Value

`object`

## Fired by

* [Observable#set:{property}](module_utils_observablemixin-Observable.md#event-set:%7Bproperty%7D)

---

Full index of the CKEditor 5 API reference: [llms.txt](llms.txt)
