function removeIndex(arr: any[], index: number) { return arr.slice(0, index).concat(arr.slice(index+1)); } function replaceIndex(arr: T[], index: number, val: T) { return arr.slice(0, index).concat([val]).concat(arr.slice(index+1)); } function append(arr: T[], val: T) { return arr.concat([val]); } function arrayOf(length: number, func: (i: number) => T): T[] { var out: T[] = []; for (var i = 0; i < length; i++) { out.push(func(i)); } return out; } function shallowClone(obj: T): T { return Object.assign({}, obj); } let getUID = function() { // does NOT generate UUIDs. Meant to create list keys ONLY let id = 0; return function() { return id++ } }() type DistributiveOmit = T extends any ? Omit : never; //type DistributivePick = T extends any ? Pick : never; export {removeIndex, replaceIndex, append, arrayOf, shallowClone, getUID}; export type {DistributiveOmit};