Trigger
TypeScript向けに書かれたイベント通知機構です。
Node.jsの EventEmitter
に相当する機能を提供しますが、TypeScript上の型定義を明確かつ簡潔にするため次の制限を加えています。
- 名前(イベント名)を持たない (各通知ごとに個別の
Trigger
インスタンスを利用する) - 引数は高々一つ
インストール
Node.jsが必要です。次のコマンドでインストールできます。
npm install @akashic/trigger
利用方法
import
するとclass Trigger
, ChainTrigger
が利用できます。
以下は Trigger
の単純な使用例です。
APIの詳細な仕様は Trigger.ts, ChainTrigger.ts のコメントをご覧ください。
import { Trigger } from "@akashic/trigger";
const t = new Trigger<string>();
t.add((s: string) => {
console.log("fired:", s);
});
t.add(someObject.method, someObject);
t.add({
func: someObject.method,
owner: someObject,
name: "name-as-you-like",
index: 0
});
t.addOnce((s: string) => {
});
t.fire("some-string-value");
t.removeAll({ owner: someObject });
t.removeAll();
併せて、 Trigger
, ChainTrigger
の公開APIと同じシグネチャを持つinterface TriggerLike
, ChainTriggerLike
も公開しています。
公開インターフェースなどにおいて、クラスへの依存を避け duck-typing を可能にしたいケースでは、 Trigger
などをこれにキャストしてご利用ください。
import { Trigger, TriggerLike } from "@akashic/trigger";
export class Foo {
onDestroyed: TriggerLike<void>;
constructor() {
this.onDestroyed = new Trigger<void>();
}
someMethod(trigger: TriggerLike<number>): void {
trigger.fire(someValue);
}
}
ライセンス
本リポジトリは MIT License の元で公開されています。
詳しくは LICENSE をご覧ください。
ただし、画像ファイルおよび音声ファイルは
CC BY 2.1 JP の元で公開されています。