Some great solutions above, didn't see one for Typescript fleshed out, so here it goes. Based on @Ethan Browns solution above
const pick = < T extends object, K extends keyof T >(
    obj: T,
    ...keys: K[]
): Pick< T, K > =>
    keys.reduce< any >( ( r, key ) => {
        r[ key ] = obj[ key ];
        return r;
    }, {} );
And for bonus, here is TS friendly es6 omit, and one that is much more performant below, but less es6.
const omit = < T extends object, K extends keyof T >(
    obj: T,
    ...keys: K[]
): Omit< T, K > =>
    keys.reduce( ( r, key ) => ( delete r[ key ], r ), {
        ...obj,
    } );
Way more performant omit: http://jsben.ch/g6QCK
const omit = < T extends object, K extends keyof T >(
    obj: T,
    ...keys: K[]
): Omit< T, K > => {
    let r: any = {};
    let length = keys.length;
    while ( length-- ) {
        const key = keys[ length ];
        r[ key ] = obj[ key ];
    }
    return r;
};