如何编写一个javascript重载函数,可以通过visual studio代码intellisense检测到,以及如何记录它。
例如jasmine的it()函数如下所示。
起作用(期望:字符串,断言?:(完成:DoneFn)=> void,超时?:数字):void (+ 1重载)
答案 0 :(得分:1)
Jasmine实际上没有定义两个方法(一个重载另一个)。您在IDE中看到的原因是因为键入文件具有针对不同可用用法声明的两个版本。例如,以下是older version of DefinitelyTyped设置it()
函数的方式:
// Type definitions for Jasmine 1.3
// ...
declare function it(expectation: string, assertion: () => void): void;
declare function it(expectation: string, assertion: (done: (err?: any) => void) => void): void;
作为参考,以下是该版本的Jasmine中的相关代码,表明只有一个函数处理这两个用例:
<强> base.js (lines 485-501) 强>
/**
* Creates a Jasmine spec that will be added to the current suite.
*
* // TODO: pending tests
*
* @example
* it('should be true', function() {
* expect(true).toEqual(true);
* });
*
* @param {String} desc description of this specification
* @param {Function} func defines the preconditions and expectations of the spec
*/
var it = function(desc, func) {
return jasmine.getEnv().it(desc, func);
};
if (isCommonJS) exports.it = it;
<强> Env.js (lines 151-161) 强>
jasmine.Env.prototype.it = function(description, func) {
var spec = new jasmine.Spec(this, this.currentSuite, description);
this.currentSuite.add(spec);
this.currentSpec = spec;
if (func) {
spec.runs(func);
}
return spec;
};