diff --git a/better-curry/better-curry-tests.ts b/better-curry/better-curry-tests.ts
new file mode 100644
index 0000000000..15213d58b6
--- /dev/null
+++ b/better-curry/better-curry-tests.ts
@@ -0,0 +1,25 @@
+///
+
+import bc = require('better-curry');
+bc.flatten([1,2,3,[1,2],['a']]) === [];
+bc.MAX_OPTIMIZED = 5;
+
+function fn(...args: number[]): number[] {
+ return [].concat([1]);
+}
+
+function fn2(arg1: string, arg2: any): number {
+ return parseInt(arg1 + String(arg2)) + 1;
+}
+
+bc.predefine(fn, [1,2])() === [];
+bc.predefine(fn, [1,2]).__length === 3;
+
+var f = bc.wrap(fn2, {}, 10, true);
+f('1', 2) === 3;
+
+var delegate = bc.delegate({}, 'ok');
+delegate.access('ok') === delegate;
+delegate.getter('getter').setter('setter') === delegate;
+delegate.all(['1','2']);
+delegate.revoke('adsf').access('asdf');
\ No newline at end of file
diff --git a/better-curry/better-curry.d.ts b/better-curry/better-curry.d.ts
new file mode 100644
index 0000000000..59ebe0a37c
--- /dev/null
+++ b/better-curry/better-curry.d.ts
@@ -0,0 +1,50 @@
+// Type definitions for better-curry
+// Project: https://github.com/pocesar/js-bettercurry
+// Definitions by: Paulo Cesar
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare var BetterCurry: BetterCurryModule.BetterCurry;
+
+declare module BetterCurryModule {
+
+ export interface DelegateOptions {
+ as?: string;
+ len?: number;
+ args?: any[];
+ name?: string;
+ }
+
+ export class Delegate {
+ proto: T;
+ target: string;
+ methods: any[];
+ getters: any[];
+ setters: any[];
+ all: (skip?: string[]) => void;
+ method: (name: string|DelegateOptions) => Delegate;
+ getter: (name: string|DelegateOptions) => Delegate;
+ setter: (name: string|DelegateOptions) => Delegate;
+ access: (name: string|DelegateOptions) => Delegate;
+ revoke: (name: string) => Delegate;
+ constructor(proto: T, target: string);
+ }
+
+ export interface OriginalFunctionReminder extends Function {
+ __length: number;
+ }
+
+ export interface BetterCurry {
+ predefine: (fn: T, args: any[], context?: Object, len?: number, checkArguments?: boolean) => OriginalFunctionReminder;
+ wrap: (fn: T, context?: Object, len?: number, checkArguments?: boolean) => OriginalFunctionReminder;
+ flatten: (...args: Array|any>) => any[];
+ delegate: (proto: T, target: string) => Delegate;
+ MAX_OPTIMIZED: number;
+ }
+
+}
+
+declare module 'better-curry' {
+ var bc: BetterCurryModule.BetterCurry;
+
+ export = bc;
+}
\ No newline at end of file