I migrated a magento 1 site to magento 2, and checkout (any theme) immediately failed with error:

Exception #0 (Magento\Framework\Exception\RuntimeException): 
Type Error occurred when creating object:
Argument 1 passed to Magento\Eav\Model\Entity\Attribute\Source\Config::__construct()
must be of the type array, null given

This post how I debugged/tracked down the issue.

Using your IDE (Mine is PHPSTorm), load the file: 


and remove the parameter type of 'array'

so the constructor is to be just:

public function __construct($options)
$this->_optionsData = $options;

and place a breakpoint on the line 

$this->_optionsData = $options;

Next run the site and wait for the breakpoint to hit. If you get multiple, step through until you get the NULL $options value

Now, in the traceroute, step back until you find the code where the class is instantiated. Just read the code backtracked, you will find it in the trace.

There wou will find information on what was calling this class, and allow you to make changes (likely db) to fix the issue

trace back

In my case I had attributes refered to in table 


which no longer existed as actual attributes, thus failed.

They related to address validation

I simply had to delete them, and functionality was fixed

DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'adminhtml_customer_address') and (`attribute_id` = '361');
DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'customer_address_edit') and (`attribute_id` = '361');
DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'customer_register_address') and (`attribute_id` = '361');
DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'adminhtml_customer_address') and (`attribute_id` = '362');
DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'customer_address_edit') and (`attribute_id` = '362');
DELETE FROM `customer_form_attribute` WHERE (`form_code` = 'customer_register_address') and (`attribute_id` = '362');