Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何使用函数数组?_Typescript - Fatal编程技术网

Typescript 如何使用函数数组?

Typescript 如何使用函数数组?,typescript,Typescript,在下面的代码中,onResizeWindowHandles具有类型any,但必须是函数数组: export default class PageLayoutManager { private $Window: JQuery<Window>; private onResizeWindowHandlers: any; constructor () { this.$Window = $(window); this.handleWindowResize();

在下面的代码中,
onResizeWindowHandles
具有类型
any
,但必须是函数数组:

export default class PageLayoutManager {

  private $Window: JQuery<Window>;
  private onResizeWindowHandlers: any;

  constructor () {
    this.$Window = $(window);

    this.handleWindowResize();
    this.onResizeWindowHandlers = new Array();
  }

  public addWindowOnResizeHandler(newHandler: any): void {
    this.onResizeWindowHandlers.push(newHandler);
  }

  private handleWindowResize(): void {
    this.$Window.on('resize', () => {
      this.onResizeWindowHandlers.forEach(handlerFunction => {
        handlerFunction();
      })
    });
  }
}
导出默认类PageLayoutManager{
私有$Window:JQuery;
私有OnResizeWindowHandler:任意;
构造函数(){
此.$Window=$(Window);
此.handleIndowerSize();
this.onResizeWindowHandlers=新数组();
}
public addWindowOnResizeHandler(newHandler:any):void{
this.onResizeWindowHandlers.push(newHandler);
}
私有HandleIndowerSize():void{
此.$Window.on('resize',()=>{
此.onResizeWindowHandlers.forEach(handlerFunction=>{
handlerFunction();
})
});
}
}
如何正确设置大小调整窗口句柄的类型


您可以将数组类与泛型中的函数类一起使用,如下所示:

private onResizeWindowHandlers: Array<Function>;
私有onResizeWindowHandler:数组;

以下是使用类型别名键入函数的语法

type MyFunc = (arg1: number, arg2: string) => boolean
或者,作为接口:

interface MyFunc {
  (arg1: number, arg2: string): boolean
}
两者都可以,但我更喜欢别名类型。它更简洁易读

在您的例子中,
()=>void
可能是最合适的,因为函数是在没有参数的情况下调用的,并且返回类型是未使用的

type ResizeHandler = () => void

export default class PageLayoutManager {
  private onResizeWindowHandlers: ResizeHandler[]

  constructor () {
    this.onResizeWindowHandlers = [] // as an aside, use `[]` instead of `new Array()`
  }

  public addWindowOnResizeHandler(newHandler: ResizeHandler): void {
    this.onResizeWindowHandlers.push(newHandler)
  }
}

类型
函数在这里也可以工作,但它基本上与
(…args:any[])=>any
,这不是非常安全的类型,通常应该避免使用。

非常简洁的解决方案!非常感谢。