Merge pull request #4834 from enlight/atom-event-kit

Add typings for Atom's event-kit library
This commit is contained in:
Masahiro Wakame
2015-07-13 07:22:56 +09:00
3 changed files with 150 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
[*.ts]
indent_style = tab
indent_size = 4
+65
View File
@@ -0,0 +1,65 @@
/// <reference path="./event-kit.d.ts" />
// The following line only works in TypeScript 1.5
//import { Disposable, CompositeDisposable, Emitter } from "event-kit";
// DefinitelyTyped is still using TypeScript 1.4 to run tests
// so until they upgrade we have to do the following instead
import eventKit = require('event-kit');
type Disposable = AtomEventKit.Disposable;
var Disposable = eventKit.Disposable;
type CompositeDisposable = AtomEventKit.CompositeDisposable;
var CompositeDisposable = eventKit.CompositeDisposable;
type Emitter = AtomEventKit.Emitter;
var Emitter = eventKit.Emitter;
// Emitter
class User {
private emitter: Emitter;
name: string;
constructor() {
this.emitter = new Emitter();
}
onDidChangeName(callback: (name: string) => void): Disposable {
return this.emitter.on('did-change-name', callback);
}
setName(name: string): void {
if (this.name != name) {
this.name = name;
this.emitter.emit('did-change-name', name);
}
}
destroy(): void {
this.emitter.dispose();
}
}
// Disposable
var disposable = new Disposable(() => {
// cleanup
});
disposable.dispose();
var user = new User();
var subscription = user.onDidChangeName((name: string) => {
console.log('User name change to: ' + name);
});
subscription.dispose();
// CompositeDisposable
var subscriptions = new CompositeDisposable();
subscriptions.add(
user.onDidChangeName((name: string) => {
console.log('subscriber #1');
}),
user.onDidChangeName((name: string) => {
console.log('subscriber #2');
})
);
subscriptions.dispose();
+82
View File
@@ -0,0 +1,82 @@
// Type definitions for event-kit v1.2.0
// Project: https://github.com/atom/event-kit
// Definitions by: Vadim Macagon <https://github.com/enlight/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module AtomEventKit {
interface IDisposable {
dispose(): void;
}
/** Static side of the Disposable class. */
interface DisposableStatic {
prototype: Disposable;
new (disposalAction: Function): Disposable;
}
/** Instance side of the Disposable class. */
interface Disposable extends IDisposable {
disposed: boolean;
constructor: DisposableStatic;
}
/** A class that represent a handle to a resource that can be disposed. */
var Disposable: DisposableStatic;
/** Static side of the CompositeDisposable class. */
interface CompositeDisposableStatic {
prototype: CompositeDisposable;
new (...disposables: IDisposable[]): CompositeDisposable;
}
/** Instance side of the CompositeDisposable class. */
interface CompositeDisposable extends IDisposable {
disposed: boolean;
constructor: CompositeDisposableStatic;
add(...disposables: IDisposable[]): void;
remove(disposable: IDisposable): void;
clear(): void;
}
/**
* A class that aggregates multiple [[Disposable]] instances together into a single disposable,
* so that they can all be disposed as a group.
*/
var CompositeDisposable: CompositeDisposableStatic;
/** Static side of the Emitter class. */
interface EmitterStatic {
prototype: Emitter;
new (): Emitter;
}
/** Instance side of the Emitter class. */
interface Emitter {
isDisposed: boolean;
constructor: EmitterStatic;
dispose(): void;
/**
* Registers a handler to be invoked whenever the given event is emitted.
* @return An object that will unregister the handler when disposed.
*/
on(eventName: string, handler: (value: any) => void, unshift?: boolean): Disposable;
/**
* Registers a handler to be invoked *before* all previously registered handlers for
* the given event.
* @return An object that will unregister the handler when disposed.
*/
preempt(eventName: string, handler: (value: any) => void): Disposable;
/** Invokes any registered handlers for the given event. */
emit(eventName: string, value: any): void;
}
/** A utility class for implementing event-based APIs. */
var Emitter: EmitterStatic;
}
declare module "event-kit" {
export = AtomEventKit;
}