javascript - TypeScript - 如何定义具有任何类型参数的函数类型

标签 javascript typescript

我是 TypeScript 的新手。

我想定义具有任何类型参数的函数类型。 该函数可以是一个参数,也可以是两个以上的参数。

我应该怎么写?

(args: any) => any

只有当一个参数传递给函数时,上面的这种写法才有效。

class NotificationCenter {

    private observerList: Array<() => any>;

    constructor() {
        this.observerList = [];
    }

    addObserver(observer: () => any): void {

        this.observerList.push(observer);

    }

}


let notificationCenter: NotificationCenter = new NotificationCenter();

let observer1 = () => {};
let observer2 = (text: string) => {return "observer2"};
let observer3 = (id: number, data: Array<any>) => {return "observer3"};

//This works fine.
notificationCenter.addObserver(observer1);

//Error:Argument of type '(text: string) => string' is not assignable to parameter of type '() => any'.
notificationCenter.addObserver(observer2);

//Error:Argument of type '(id: number, data: any[]) => string' is not assignable to parameter of type '() => any'.
notificationCenter.addObserver(observer3);

最佳答案

你说函数可以有一个参数,也可以有两个以上的参数。听起来它可以有一个或三个或更多参数。然后你必须让它重载。

function foo(arg: any): any { /*do work*/ }
function foo(arg: any, arg2: any, ...rest: any[]): any { /*do work*/ }

关于javascript - TypeScript - 如何定义具有任何类型参数的函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36335842/

相关文章:

javascript - 如何阻止 jQuery .load() 函数多次触发?

javascript - 在我的代码中使用 Promises?使用延迟对象和 Jquery

javascript - Gulp js cssmin 问题。无法覆盖现有的缩小文件

typescript - Vue + TypeScript + CSS 模块

typescript - VS代码: tslint-language-service plugin shows lint hints as error and not warning

javascript - 在 React 中循环遍历 Map

javascript - Soundcloud 自定义播放器 HTML 生成/堆叠顺序

javascript - JavaScript 是无类型语言吗?

javascript - Angular2 和 ionic2 中的 Observable 和 Promise 请求失败

angular - 如何清除 Angular 中的 div 内容? ( Angular 7)