There is some description of `targetFields` in the [Lightning Data Service (Beta)](https://releasenotes.docs.salesforce.com/en-us/summer17/release-notes/rn_lightning_data_service.htm) release notes:

> force:recordData includes a new attribute called targetFields, which
> is populated with a simplified view of the record’s fields.
> targetFields is automatically updated whenever Lightning Data Service
> detects a record change. v.targetFields.Name is equivalent to
> v.targetRecord.fields.Name.value. A simple way to update
> force:recordPreview usage to force:recordData is to change references
> from targetRecord to targetFields.

So its worth setting up this attribute so you have a more convenient way to reference the fields in your component e.g.:

    v.targetFields.Name 

instead of:

    v.targetRecord.fields.Name.value

so getting rid of `.fields` and `.value` that would otherwise have to be present in every reference in the markup. Essentially `force:recordData` is keeping two JavaScript data structures in sync for you, where the `targetFields` one is generally easier and cleaner to use in the component markup.

(And it also makes replacing `force:recordPreview` with `force:recordData` simple.)