"options" binding with an enum as data source
Your solution works fine and I didn't find a better solution. I've just upgraded it little bit, by automatic fill the options, so it is usable to any Enum class.

Here I found how to enumerate Enum type

export class SelectEditorObject
{
    private options: KnockoutObservableArray&lt;keyValuePair&lt;number, string&gt;&gt;;
    private selection: KnockoutObservable&lt;number&gt;;

    constructor(e: any, value: number)
    {
        var options = SelectEditorObject.getNamesAndValues(e);
        this.selection = ko.observable&lt;number&gt;(value);
        this.options = ko.observableArray&lt;keyValuePair&lt;number, string&gt;&gt;(options);
    }

    public toString()
    {
        var selected = undefined;
        this.options().forEach((pair) =&gt;
        {
            if (pair.key === this.selection())
            {
                selected = pair.value;
            }
        }, this);
        return selected;
    }

    public getValue()
    {
        return this.selection();
    }

    private static getNames(e: any)
    {
        return Object.keys(e).filter(v =&gt; isNaN(parseInt(v, 10)));
    }

    private static getValues(e: any)
    {
        return Object.keys(e).map(v =&gt; parseInt(v, 10)).filter(v =&gt; !isNaN(v));
    }

    public static getNamesAndValues(e: any): Array&lt;keyValuePair&lt;number, string&gt;&gt;
    {
        return SelectEditorObject.getValues(e).map(v =&gt; { return new keyValuePair(v, e[v]) });
    }
}

export class keyValuePair&lt;key_type, value_type&gt;
{
    public key: key_type;
    public value: value_type;
    constructor(key: key_type, value: value_type)
    {
        this.key = key;
        this.value = value;
    }
}