你能在TypeScript中扩展一个函数吗?

Wil*_*unn 11 typescript

我帮助维护一个生成间谍函数的JavaScript库,它允许您检查传入函数的调用方式(主要用于单元测试).

该库创建了一个函数,该函数具有其他属性,允许您检查调用.

是否可以创建一个TypeScript定义,允许将函数传递给需要函数且具有额外属性的方法?

这是无效的,但是类似于:

class Spy extends function {
    wasCalled: () => boolean;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这将允许我将间谍传递给具有此签名的函数:

function subjectUnderTest(callback:() => void) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ens 34

是的,TypeScript手册将其称为"混合类型",因为它是功能类型和常规接口的组合.

interface Spy {
    (foo: string, bar: number) : boolean; // Just an example
    wasCalled() : boolean;
}

var spy : Spy = createASpySomehow();
var result = spy("foo", 123);
if (spy.wasCalled()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)