mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-04-07 22:38:13 +08:00
[SignalsJS] Add Generic type support (#20429)
* [SignalsJS] Add Generic type support * Any as default Signal type * Add default any types for other declarations
This commit is contained in:
24
types/signals/index.d.ts
vendored
24
types/signals/index.d.ts
vendored
@@ -10,23 +10,23 @@ export as namespace signals;
|
||||
|
||||
declare namespace signals {
|
||||
|
||||
interface SignalWrapper {
|
||||
Signal: Signal
|
||||
interface SignalWrapper<T = any> {
|
||||
Signal: Signal<T>
|
||||
}
|
||||
|
||||
interface SignalBinding {
|
||||
interface SignalBinding<T = any> {
|
||||
active: boolean;
|
||||
context: any;
|
||||
params: any;
|
||||
detach(): Function;
|
||||
execute(paramsArr?: any[]): any;
|
||||
getListener(): Function;
|
||||
getSignal(): Signal;
|
||||
getListener(): (...params: T[]) => void;
|
||||
getSignal(): Signal<T>;
|
||||
isBound(): boolean;
|
||||
isOnce(): boolean;
|
||||
}
|
||||
|
||||
interface Signal {
|
||||
interface Signal<T = any> {
|
||||
/**
|
||||
* Custom event broadcaster
|
||||
* <br />- inspired by Robert Penner's AS3 Signals.
|
||||
@@ -34,7 +34,7 @@ declare namespace signals {
|
||||
* @author Miller Medeiros
|
||||
* @constructor
|
||||
*/
|
||||
new (): Signal;
|
||||
new (): Signal<T>;
|
||||
|
||||
/**
|
||||
* If Signal is active and should broadcast events.
|
||||
@@ -59,7 +59,7 @@ declare namespace signals {
|
||||
* @param listenercontext Context on which listener will be executed (object that should represent the `this` variable inside listener function).
|
||||
* @param priority The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
|
||||
*/
|
||||
add(listener: Function, listenerContext?: any, priority?: Number): SignalBinding;
|
||||
add(listener: (...params: T[]) => void, listenerContext?: any, priority?: Number): SignalBinding<T>;
|
||||
|
||||
/**
|
||||
* Add listener to the signal that should be removed after first execution (will be executed only once).
|
||||
@@ -68,14 +68,14 @@ declare namespace signals {
|
||||
* @param listenercontext Context on which listener will be executed (object that should represent the `this` variable inside listener function).
|
||||
* @param priority The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
|
||||
*/
|
||||
addOnce(listener: Function, listenerContext?: any, priority?: Number): SignalBinding;
|
||||
addOnce(listener: (...params: T[]) => void, listenerContext?: any, priority?: Number): SignalBinding<T>;
|
||||
|
||||
/**
|
||||
* Dispatch/Broadcast Signal to all listeners added to the queue.
|
||||
*
|
||||
* @param params Parameters that should be passed to each handler.
|
||||
*/
|
||||
dispatch(...params: any[]): void;
|
||||
dispatch(...params: T[]): void;
|
||||
|
||||
/**
|
||||
* Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).
|
||||
@@ -100,12 +100,12 @@ declare namespace signals {
|
||||
/**
|
||||
* Check if listener was attached to Signal.
|
||||
*/
|
||||
has(listener: Function, context?: any): boolean;
|
||||
has(listener: (...params: T[]) => void, context?: any): boolean;
|
||||
|
||||
/**
|
||||
* Remove a single listener from the dispatch queue.
|
||||
*/
|
||||
remove(listener: Function, context?: any): Function;
|
||||
remove(listener: (...params: T[]) => void, context?: any): Function;
|
||||
|
||||
removeAll(): void;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import signals = require("signals");
|
||||
// lifted from https://github.com/millermedeiros/js-signals/wiki/Examples
|
||||
interface TestObject {
|
||||
started: signals.Signal;
|
||||
stopped: signals.Signal;
|
||||
started: signals.Signal<any>;
|
||||
stopped: signals.Signal<any>;
|
||||
}
|
||||
|
||||
namespace Signals.Tests {
|
||||
@@ -144,11 +144,11 @@ namespace Signals.AdvancedTests {
|
||||
var handler = function(){
|
||||
alert('foo bar');
|
||||
};
|
||||
var binding: signals.SignalBinding = myObject.started.add(handler); //methods `add()` and `addOnce()` returns a SignalBinding object
|
||||
var binding: signals.SignalBinding<() => void> = myObject.started.add(handler); //methods `add()` and `addOnce()` returns a SignalBinding object
|
||||
binding.execute(); //will alert "foo bar"
|
||||
|
||||
//Retrieve anonymous listener
|
||||
var binding:signals.SignalBinding = myObject.started.add(function(){
|
||||
var binding:signals.SignalBinding<() => void> = myObject.started.add(function(){
|
||||
alert('foo bar');
|
||||
});
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Signals.AdvancedTests {
|
||||
var anonymousHandler = binding.getListener(); //reference to the anonymous function
|
||||
|
||||
//Remove / Detach anonymous listener
|
||||
var binding:signals.SignalBinding = myObject.started.add(function(){
|
||||
var binding:signals.SignalBinding<() => void> = myObject.started.add(function(){
|
||||
alert('foo bar');
|
||||
});
|
||||
myObject.started.dispatch(); //will alert "foo bar"
|
||||
@@ -166,10 +166,10 @@ namespace Signals.AdvancedTests {
|
||||
myObject.started.dispatch(); //nothing happens
|
||||
|
||||
//Check if binding will execute only once
|
||||
var binding1:signals.SignalBinding = myObject.started.add(function(){
|
||||
var binding1:signals.SignalBinding<any> = myObject.started.add(function(){
|
||||
alert('foo bar');
|
||||
});
|
||||
var binding2:signals.SignalBinding = myObject.started.addOnce(function(){
|
||||
var binding2:signals.SignalBinding<() => void> = myObject.started.addOnce(function(){
|
||||
alert('foo bar');
|
||||
});
|
||||
alert(binding1.isOnce()); //alert "false"
|
||||
@@ -180,7 +180,7 @@ namespace Signals.AdvancedTests {
|
||||
var obj = {
|
||||
foo : "it's over 9000!"
|
||||
};
|
||||
var binding:signals.SignalBinding = myObject.started.add(function(){
|
||||
var binding:signals.SignalBinding<() => void> = myObject.started.add(function(){
|
||||
alert(this.foo);
|
||||
});
|
||||
myObject.started.dispatch(); //will alert "bar"
|
||||
@@ -188,7 +188,7 @@ namespace Signals.AdvancedTests {
|
||||
myObject.started.dispatch(); //will alert "it's over 9000!"
|
||||
|
||||
//Add default parameters to Signal dispatch (v0.6.3+)
|
||||
var binding:signals.SignalBinding = myObject.started.add(function(a:string, b:string, c:string){
|
||||
var binding:signals.SignalBinding<() => void> = myObject.started.add(function(a:string, b:string, c:string){
|
||||
alert(a +' '+ b +' '+ c);
|
||||
});
|
||||
binding.params = ['lorem', 'ipsum']; //set default parameters of the binding
|
||||
|
||||
Reference in New Issue
Block a user