返回另一个函数的函数的返回类型是什么

我正在开发使用打印脚本的量角器测试。似乎可用于量角器的 d.ts 文件已经过时了。我试图更新它,以包括预期条件量角器有 补充

总结一下,ExpectedConditionsare 是量角器中的一组函数,它们返回一个函数,该函数返回您所承诺的值。

一个用法的例子:

protractor.ExpectedCondtions.visibilityOf(element(by.id('button1')))();

我不知道如何告诉量角器,我返回的函数将返回一个特定的返回类型。有人有这方面的经验吗?

62376 次浏览

如果我没有理解错的话,您的解决方案将取决于“ second”函数返回的类型。

简而言之,至少有两种方法可以做到这一点:

  1. Lambda 语法
  2. 接口(普通接口和通用接口)

我试着在下面的代码中解释所有这些,请检查一下:

module main
{
export class TestClass
{
// Use lamba syntax as an interface for a return function
protected returnSpecificFunctionWhichReturnsNumber(): () => number
{
return this.specificFunctionWhichReturnsNumber;
}


protected specificFunctionWhichReturnsNumber(): number
{
return 0;
}


// Use an interface to describe a return function
protected returnSpecificInterfaceFunction(): INumberFunction
{
return this.specificFunctionWhichReturnsNumber;
}


// Use a generic interface to describe a return function
protected returnSpecificGenericInterfaceFunction(): IReturnFunction<number>
{
return this.specificFunctionWhichReturnsNumber;
}
}


// An interface for a function, which returns a number
export interface INumberFunction
{
(): number;
}


// A generic interface for a function, which returns something
export interface IReturnFunction<ValueType>
{
(): ValueType;
}
}

由于这个问题首先出现在 Google 中,关于如何为返回函数的函数键入返回函数,因此我将在这里添加声明这些类型的通用解决方案。

因此,如果您想要添加类型声明到这个 curry 的 add函数:

const add = (a : number) => (b: number) => a + b;

你只需复制 =符号后面的内容,然后将返回值设置为相应的值:

export const add: (a : number) => (b: number) => number =
(a : number) => (b: number) => a + b;

但是在这里,您不需要实际函数的类型,所以您只需要输入这个类型,就好像它是 JS:

export const add: (a : number) => (b: number) => number =
a => b => a + b;

更广泛地写作:

const add: (a : number) => (b: number) => number =
a => {
console.log(a);
return b => {
console.log(b);
return a + b;
}
};

使用 function:

function add(a: number): (b: number) => number {
return function(b) {
return a + b
}
}

使用非专利药:

export const add: <A extends number, B extends number>(a : A) => (b: B) => number =
a => b => a + b;

或使用 function(B extends number可以与 A extends number位于同一位置,视使用情况而定) :

function add<A extends number>(a: A): <B extends number>(b: B) => number {
return function(b) {
return a + b
}
}