type AnswerCallback = (result: Result, ...args: Arguments) => Result; interface IQuestionAsker { ask(result: Result, ...args: Arguments): Result; } interface IQuestion extends IQuestionAsker { addAnswer(callback: AnswerCallback): void; removeAnswer(callback: AnswerCallback): void; addOneTimeAnswer(callback: AnswerCallback): void; } declare class Question implements IQuestion { protected _callbacks: AnswerCallback[]; protected _callbacksSet: Set>; addAnswer(callback: AnswerCallback): void; removeAnswer(callback: AnswerCallback): void; addOneTimeAnswer(callback: AnswerCallback): void; ask(result: Result, ...args: Arguments): Result; } export { type AnswerCallback, type IQuestion, type IQuestionAsker, Question };