Generic Promises For TypeScript