diff --git a/milkcocoa/milkcocoa-tests.ts b/milkcocoa/milkcocoa-tests.ts
new file mode 100644
index 0000000000..2a34b4e1b7
--- /dev/null
+++ b/milkcocoa/milkcocoa-tests.ts
@@ -0,0 +1,37 @@
+///
+var mk = new MilkCocoa("hostAddress");
+mk.addAccount("sample@test.com", "password", null, (err: MilkCocoa.Error.AddAccount, user: milkcocoa.User) => {
+
+ switch (err) {
+ case null:
+ console.log("Done.");
+ break;
+ case MilkCocoa.Error.AddAccount.FormatError:
+ console.log("Invalid mail address.");
+ break;
+ case MilkCocoa.Error.AddAccount.AlreadyExist:
+ console.log("Already added account.");
+ break;
+ }
+});
+mk.login("sample@test.com", "password", (err: MilkCocoa.Error.Login, user: User) => {
+ if (err === MilkCocoa.Error.Login.FormatError) {
+ console.log("Invalid mail address.");
+ } else if (err === MilkCocoa.Error.Login.LoginError) {
+ console.log("Or Email that is not registered, it is not a valid password.");
+ } else if (err === MilkCocoa.Error.Login.EmailNotVerificated) {
+ console.log("Still account is temporary registration.");
+ } else {
+ //成功時はユーザIDを取得できます。
+ var user_id = user.id;
+ }
+});
+mk.dataStore("datastore").push({ message: "this is message." }, (data: DataStoreCallbackData) => {
+ console.log("pushed.");
+});
+mk.dataStore("datastore").child("chat").child("message").on("push", (data: DataStoreCallbackData) => {
+ console.log(data.value.message);
+});
+mk.dataStore("datastore").child("chat").child("message").query().limit(10).done((data) => {
+ console.log(data.message);
+});
diff --git a/milkcocoa/milkcocoa-tests.ts.tscparams b/milkcocoa/milkcocoa-tests.ts.tscparams
new file mode 100644
index 0000000000..934bc29ef2
--- /dev/null
+++ b/milkcocoa/milkcocoa-tests.ts.tscparams
@@ -0,0 +1 @@
+--noImplicitAny
\ No newline at end of file
diff --git a/milkcocoa/milkcocoa.d.ts b/milkcocoa/milkcocoa.d.ts
new file mode 100644
index 0000000000..385137350d
--- /dev/null
+++ b/milkcocoa/milkcocoa.d.ts
@@ -0,0 +1,75 @@
+// Type definitions for Milkcocoa 0.2.8
+// Project: https://mlkcca.com/
+// Definitions by: odangosan
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+// Api Reference : https://mlkcca.com/document/api-js.html
+
+declare module milkcocoa {
+ class MilkCocoa {
+ constructor(host: string, callback?: Function);
+ dataStore(path: string): DataStore;
+ addAccount(email: string, password: string, options?: {}, callback?: (err: MilkCocoa.Error.AddAccount, user: User) => void): void;
+ login(email: string, password: string, callback: (err: MilkCocoa.Error.Login, user: User) => void): void;
+ logout(callback?: (err: string) => void): void;
+ getCurrentUser(callback: (err: MilkCocoa.Error.GetCurrentUser, user: { id: string }) => void): void;
+ }
+
+ module MilkCocoa {
+ module Error {
+ enum AddAccount {
+ // FormatError = 1, AlreadyExist = 2
+ FormatError, AlreadyExist
+ }
+ enum Login {
+ // FormatError = 1, LoginError = 2, EmailNotVerificated = 3
+ FormatError, LoginError, EmailNotVerificated
+ }
+ enum GetCurrentUser {
+ // NotLoggedIn = 1
+ NotLoggedIn
+ }
+ }
+ }
+
+ interface DataStore {
+ push(object: {}, callback?: (data: DataStoreCallbackData) => void): void;
+ set(id: string, data: {}): void;
+ remove(id: string): void;
+ send(object: {}): void;
+ // event push, remove, set, send
+ on(event: string, callback: (data: DataStoreCallbackData) => void): void;
+ off(event: string): void;
+ get(id: string, callback: (data: {}) => void): void;
+ query(condition?: {}): Query;
+ child(path: string): DataStore;
+ parent(): DataStore;
+ root(): DataStore;
+ }
+
+ interface DataStoreCallbackData {
+ err: string;
+ path: string;
+ id: string;
+ value: any;
+ }
+
+ interface Query {
+ done(callback: (data: any) => void): void;
+ limit(number: number): Query;
+ skip(index: number): Query;
+ // mode asc, desc
+ sort(mode: string): Query;
+ }
+
+ interface User {
+ id: string;
+ email: string;
+ option: {};
+ }
+}
+
+import MilkCocoa = milkcocoa.MilkCocoa;
+import User = milkcocoa.User;
+import Query = milkcocoa.Query;
+import DataStore = milkcocoa.DataStore;
+import DataStoreCallbackData = milkcocoa.DataStoreCallbackData;
\ No newline at end of file
diff --git a/milkcocoa/milkcocoa.d.ts.tscparams b/milkcocoa/milkcocoa.d.ts.tscparams
new file mode 100644
index 0000000000..934bc29ef2
--- /dev/null
+++ b/milkcocoa/milkcocoa.d.ts.tscparams
@@ -0,0 +1 @@
+--noImplicitAny
\ No newline at end of file