Maybe redundant, but works:
let model = new Gtk.ListStore();
model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
let cbox = new Gtk.ComboBox({model: model});
let renderer = new Gtk.CellRendererText();
cbox.pack_start(renderer, true);
cbox.add_attribute(renderer, 'text', 1);
model.set(model.append(), [0, 1], ['key1', 'value1']);
model.set(model.append(), [0, 1], ['key2', 'value2']);
cbox.set_active(0); // set value
cbox.connect('changed', function(entry) {
let [success, iter] = cbox.get_active_iter();
if (!success)
return;
let myValue = model.get_value(iter, 0); // get value
});