diff --git a/random-js/random-js-tests.ts b/random-js/random-js-tests.ts
new file mode 100644
index 000000000..9ee80883b
--- /dev/null
+++ b/random-js/random-js-tests.ts
@@ -0,0 +1,29 @@
+///
+///
+
+// Examples taken from the documentation at https://github.com/ckknight/random-js
+// create a Mersenne Twister-19937 that is auto-seeded based on time and other random values
+import Engine = random.Engine;
+import Random = random.Random;
+
+var engine: Engine = Random.engines.mt19937().autoSeed();
+// create a distribution that will consistently produce integers within inclusive range [0, 99].
+var distribution: Function = Random.integer(0, 99);
+// generate a number that is guaranteed to be within [0, 99] without any particular bias.
+function generateNaturalLessThan100(): number {
+ return distribution(engine);
+}
+
+// using essentially Math.random()
+var engine2: Engine = Random.engines.nativeMath;
+// lower-case Hex string distribution
+var distribution2: Function = Random.hex(false);
+// generate a 40-character hex string
+function generateSHA1(): string {
+ return distribution(40);
+}
+
+var r: Random = new Random(Random.engines.mt19937().seedWithArray([0x12345678, 0x90abcdef]));
+var value = r.integer(0, 99);
+
+r = new Random(); // same as new Random(Random.engines.nativeMath)
diff --git a/random-js/random-js.d.ts b/random-js/random-js.d.ts
new file mode 100644
index 000000000..c03d6af0f
--- /dev/null
+++ b/random-js/random-js.d.ts
@@ -0,0 +1,62 @@
+// Type definitions for random-js 1.0.8
+// Project: https://github.com/ckknight/random-js
+// Definitions by: Gustavo Di Pietro
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module random {
+ export function Engine(): number;
+ export interface Engine {
+
+ }
+
+ export function MT19937 (): number;
+ export interface MT19937 extends Engine{
+ seed (value: number): Engine;
+ seedWithArray(array: Array): Engine
+ autoSeed(): Engine;
+ discard(count: number): Engine;
+ getUseCount(): Engine;
+ }
+
+ export class Random {
+ constructor (engine?: Engine);
+
+ static engines: {
+ nativeMath: Engine,
+ browserCrypto: Engine,
+ mt19937: () => MT19937
+ }
+
+ static integer(min: number, max: number): (engine: Engine) => number;
+ static real(min: number, max: number, inclusive: boolean): (engine: Engine) => number;
+ static bool(percentage?: number): (engine: Engine) => boolean;
+ static bool(numerator: number, denominator: number): (engine: Engine) => boolean;
+ static pick(engine: Engine, array: Array, begin?: number, end?: number): T;
+ static picker(array: Array, begin?: number, end?: number): (engine: Engine) => T;
+ static shuffle(engine: Engine, array: Array): Array;
+ static sample(engine: Engine, population: Array, sampleSize: number): Array;
+ static die(sideCount: number): (engine: Engine) => number;
+ static dice(sideCount: number, dieCount: number): (engine: Engine) => number;
+ static uuid4(engine: Engine): string;
+ static string(engine: Engine, length: number): string;
+ static string(pool: string, length: number): (engine: Engine, length: number) => string;
+ static hex(upperCase?: boolean): (engine: Engine, length: number) => string;
+ static date(start: Date, end: Date): (engine: Engine) => Date;
+
+ integer(min: number, max: number): number;
+ real(min: number, max: number, inclusive: boolean): number;
+ bool(percentage?: number): (engine: Engine) => boolean;
+ bool(numerator: number, denominator: number): boolean;
+ pick(engine: Engine, array: Array, begin?: number, end?: number): T;
+ picker(array: Array, begin?: number, end?: number): (engine: Engine) => T;
+ shuffle(engine: Engine, array: Array): Array;
+ sample(engine: Engine, population: Array, sampleSize: number): Array;
+ die(sideCount: number): (engine: Engine) => number;
+ dice(sideCount: number, dieCount: number): number;
+ uuid4(engine: Engine): string;
+ string(engine: Engine, length: number): string;
+ string(pool: string, length: number): string;
+ hex(upperCase?: boolean): string;
+ date(start: Date, end: Date): Date;
+ }
+}