Question: I am trying to get the last recipient (email address) just introduced into the "To", "Bc" or "Cc" fields when field loses its focus. How can I achieve this?

For example:

* if user just types in an email address within "To" field I want to get that.
* if user just types in an email address within "Bc" field I want to get that.
* if user just types in an email address within "Cc" field I want to get that.

Answer: 
I don't think what you're trying to achieve is doable without some helper functions or making it excessively verbose. Make a function that could help determine what `T` should be.

```
type QUESTION<T> = {
  parse: (value: string) => T
  serialize: (value: T) => string
}

function QUESTION<T>(parse: (value: string) => T, serialize: (value: T) => string): QUESTION<T> {
  return { parse, serialize };
}

const idsQuestions = [
  QUESTION(
    (input) => input.split('\n'),
    (ids) => ids.join('\n') // expect ids to be interpreted as string[]
  ),
  QUESTION(
    (input) => input.split('\n').reduce((acc, id) => ({
      ...acc,
      [id]: true,
    }), {} as Record<string, boolean>),
    (ids) => Object.keys(ids).join('\n') // expect ids to be interpreted as { [string] => boolean }
  )
] as const;

```
You need to use `genric-type`.

With this feature, you can tie between Types dynamically

```
interface Question<T>  {
  parse: (value: string) => T
  serialize: (value: T) => string
}

const idsQuestion: Question<string[]> = {
  parse: (input) => input.split('\n'),
  serialize: (ids) => ids.join('\n') // expect ids to be interpreted as string[]
}

// expect this to throw an error on build
const questionWithError: Question<boolean> = {
  parse: () => false, // return type is boolean
  serialize: (ids) => ids.join('\n') // the transpiler will show an error
}

```