get_terms() order by term_meta

the order doesn’t seem to follow the meta value

Yes, and it’s because you set the meta key like this: (which doesn’t actually set the meta key)

array(
  'key' => 'order',
),

The proper way is by using the meta_key parameter:

'meta_key' => 'order'

So the full code would be:

$type_terms = get_terms( 'type', array(
    'hide_empty' => false,
    'meta_key' => 'order',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
) );

For more information, please refer to WP_Term_Query::__construct(), which is used by the get_terms() function.