diff --git a/chance/chance-tests.ts b/chance/chance-tests.ts
new file mode 100644
index 000000000..5a2aa9a9c
--- /dev/null
+++ b/chance/chance-tests.ts
@@ -0,0 +1,36 @@
+///
+
+// Instantiation
+var globalInstance: Chance.Chance = chance;
+var createYourOwn = new Chance(Math.random);
+
+// Basic usage
+var randBool: boolean = chance.bool();
+
+var birthday: Date = chance.birthday();
+var birthdayStr: Date|string = chance.birthday({ string: true });
+
+var strArr: string[] = chance.n(chance.string, 42);
+
+var uniqInts: number[] = chance.unique(chance.integer, 99);
+
+var currencyPair = chance.currency_pair();
+var firstCurrency = currencyPair[0];
+var secondCurrency = currencyPair[1];
+
+// Mixins can be used with on-the-fly type declaration
+declare module Chance {
+ interface Chance {
+ time(): string;
+ }
+}
+
+chance.mixin({
+ time: function () {
+ var h = chance.hour({ twentyfour: true }),
+ m = chance.minute();
+ return `${h}:${m}`;
+ }
+});
+
+var timeString: string = chance.time();
diff --git a/chance/chance.d.ts b/chance/chance.d.ts
new file mode 100644
index 000000000..2af960efe
--- /dev/null
+++ b/chance/chance.d.ts
@@ -0,0 +1,213 @@
+// Type definitions for Chance 0.7.3
+// Project: http://chancejs.com
+// Definitions by: Chris Bowdon
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+declare module Chance {
+
+ interface ChanceStatic {
+ Chance(): Chance;
+ new(): Chance;
+ new(seed: number): Chance;
+ new(generator: () => any): Chance;
+ }
+
+ interface Chance {
+
+ // Basics
+ bool(opts?: Options): boolean;
+ character(opts?: Options): string;
+ floating(opts?: Options): number;
+ integer(opts?: Options): number;
+ natural(opts?: Options): number;
+ string(opts?: Options): string;
+
+ // Text
+ paragraph(opts?: Options): string;
+ sentence(opts?: Options): string;
+ syllable(opts?: Options): string;
+ word(opts?: Options): string;
+
+ // Person
+ age(opts?: Options): number;
+ birthday(): Date;
+ birthday(opts?: Options): Date|string;
+ cpf(): string;
+ first(opts?: Options): string;
+ last(opts?: Options): string;
+ name(opts?: Options): string;
+ name_prefix(opts?: Options): string;
+ name_suffix(opts?: Options): string;
+ prefix(opts?: Options): string;
+ ssn(opts?: Options): string;
+ suffix(opts?: Options): string;
+
+ // Mobile
+ android_id(): string;
+ apple_token(): string;
+ bb_pin(): string;
+ wp7_anid(): string;
+ wp8_anid2(): string;
+
+ // Web
+ color(opts?: Options): string;
+ domain(opts?: Options): string;
+ email(opts?: Options): string;
+ fbid(): string;
+ google_analytics(): string;
+ hashtag(): string;
+ ip(): string;
+ ipv6(): string;
+ klout(): string;
+ tld(): string;
+ twitter(): string;
+ url(opts?: Options): string;
+
+ // Location
+ address(opts?: Options): string;
+ altitude(opts?: Options): number;
+ areacode(): string;
+ city(): string;
+ coordinates(opts?: Options): string;
+ country(opts?: Options): string;
+ depth(opts?: Options): number;
+ geohash(opts?: Options): string;
+ latitude(opts?: Options): number;
+ longitude(opts?: Options): number;
+ phone(opts?: Options): string;
+ postal(): string;
+ province(opts?: Options): string;
+ state(opts?: Options): string;
+ street(opts?: Options): string;
+ zip(opts?: Options): string;
+
+ // Time
+ ampm(): string;
+ date(): Date;
+ date(opts: DateOptions): Date|string;
+ hammertime(): number;
+ hour(opts?: Options): number;
+ millisecond(): number;
+ minute(): number;
+ month(): string;
+ month(opts: Options): Month;
+ second(): number;
+ timestamp(): number;
+ year(opts?: Options): string;
+
+ // Finance
+ cc(opts?: Options): string;
+ cc_type(): string;
+ cc_type(opts: Options): string|CreditCardType;
+ currency(): Currency;
+ currency_pair(): [ Currency, Currency ];
+ dollar(opts?: Options): string;
+ exp(): string;
+ exp(opts: Options): string|CreditCardExpiration;
+ exp_month(opts?: Options): string;
+ exp_year(opts?: Options): string;
+
+ // Helpers
+ capitalize(str: string): string;
+ mixin(desc: MixinDescriptor): any;
+ pad(num: number, width: number, padChar?: string): string;
+ pick(arr: T[]): T;
+ pick(arr: T[], count: number): T[];
+ set: Setter;
+ shuffle(arr: T[]): T[];
+
+ // Miscellaneous
+ d4(): number;
+ d6(): number;
+ d8(): number;
+ d10(): number;
+ d12(): number;
+ d20(): number;
+ d30(): number;
+ d100(): number;
+ guid(): string;
+ hash(opts?: Options): string;
+ n(generator: () => T, count: number, opts?: Options): T[];
+ normal(opts?: Options): string;
+ radio(opts?: Options): string;
+ rpg(dice: string): number[];
+ rpg(dice: string, opts?: Options): number[]|number;
+ tv(opts?: Options): string;
+ unique(generator: () => T, count: number, opts?: Options): T[];
+ weighted(values: T[], weights: number[]): T;
+
+ // "Hidden"
+ cc_types(): CreditCardType[];
+ mersenne_twister(seed?: number): any; // API return type not defined in docs
+ months(): Month[];
+ name_prefixes(): Name[];
+ provinces(): Name[];
+ states(): Name[];
+ street_suffix(): Name;
+ street_suffixes(): Name[];
+ }
+
+ // A more rigorous approach might be to produce
+ // the correct options interfaces for each method
+ interface Options { [id: string]: any; }
+
+ interface DateOptions {
+ string?: boolean;
+ american?: boolean;
+ year?: number;
+ month?: number;
+ day?: number;
+ }
+
+ interface Month {
+ name: string;
+ short_name: string;
+ numeric: string;
+ }
+
+ interface CreditCardType {
+ name: string;
+ short_name: string;
+ prefix: string;
+ length: number;
+ }
+
+ interface Currency {
+ code: string;
+ name: string;
+ }
+
+ interface CreditCardExpiration {
+ month: string;
+ year: string;
+ }
+
+ interface MixinDescriptor { [id: string]: () => any; }
+
+ interface Setter {
+ (key: 'firstNames', values: string[]): any;
+ (key: 'lastNames', values: string[]): any;
+ (key: 'provinces', values: string[]): any;
+ (key: 'us_states_and_dc', values: string[]): any;
+ (key: 'territories', values: string[]): any;
+ (key: 'armed_forces', values: string[]): any;
+ (key: 'street_suffixes', values: string[]): any;
+ (key: 'months', values: string[]): any;
+ (key: 'cc_types', values: string[]): any;
+ (key: 'currency_types', values: string[]): any;
+ (key: string, values: T[]): any;
+ }
+
+ interface Name {
+ name: string;
+ abbreviation: string;
+ }
+}
+
+// window.chance
+declare var chance: Chance.Chance;
+declare var Chance: Chance.ChanceStatic;
+
+// import Chance = require('chance');
+declare module 'chance' {
+ export = Chance;
+}