Change record status: 
Project: 
Introduced in branch: 
11.1.x
Introduced in version: 
11.1.0
Description: 

The \Drupal\Core\TypedData\DataDefinition and child classes TypedData objects should not be accessed via ArrayAccess methods

Accessing following methods directly or indirectly will throw deprecation
- \Drupal\Core\TypedData\DataDefinition::offsetExists()
- \Drupal\Core\TypedData\DataDefinition::offsetGet()
- \Drupal\Core\TypedData\DataDefinition::offsetSet()
- \Drupal\Core\TypedData\DataDefinition::offsetUnset()

Custom and contrib code could use following replacements

Before

    $label = $definition['label']

    $array = $definition['mapping'][$key] ?? [];

    $definition['mapping'] = $array;

    unset($definition['mapping']);

After

    $label = $definition->getLabel();

    $array = $definition->toArray()['mapping'][$key] ?? [];

    $definition->setRawDefinition('mapping', $mapping);

    $array = $definition->toArray();
    unset($array['mapping']);
    $definition = new $definition::class($array);
Impacts: 
Module developers
Themers
Site templates, recipes and distribution developers