如何在TypeScript中声明函数类型

15

我正在使用typescript并将一个函数传入另一个函数。

如果我有一个在typescript中被传递到另一个函数的函数,我应该如何编写类型?

我尝试过successHandler: function,但这似乎不起作用。

export function useSubscription(address: string, successHandler: function) {
   successHandler(address)
}

3个回答

10

使用函数签名声明一个类型,然后将其作为类型传递:

type SuccessHandler = (address: string) => string;

function useSubscription(address: string, successHandler: SuccessHandler) {
    successHandler(address)
}

3
“(address: string) => void” 可能更好。由于 useSubscription 不使用 successHandler 的返回值,因此不需要返回值。 - skot

3
你可以像这样声明它:

export function useSubscription(address: string, successHandler: Function) {
   successHandler(address)
}

更改在于 Function 的大写 F。


4
是的,但这并不是类型检查。这只是让 TypeScript 保持安静。由于我们调用了 successHandler(address),我们应该声明一个类型来确保它能正常工作,即 (address: string) => void - skot
1
当然这是类型检查。你不能传递任何不是函数的东西。在原始问题中没有定义该函数。虽然假设 (address: string) => void 是合理的,但 (address: string) => ANYTHING 也是有效的。 - Oram
1
我的意思是类型检查没有起到作用;它让 TypeScript 保持沉默,而没有提供 TypeScript 应该提供的保护。我们想知道我们是否可以将 address 传递给 successHandlerFunction 并不能保证这一点。至于你的第二点,是的,(address: string) => void 允许 (address: string) => 任何东西void 关键字告诉 TypeScript 可以忽略返回值。 - undefined
1
但是我们也会检查地址类型,你只是重复指定地址必须是字符串。 - undefined

0

在这里,您可以像这样使用回调函数作为强类型参数

class Menu {
    addItem(callback: (n: string) => any) : void {
        callback('Egg Roles');
    }
}
var menu = new Menu();

var itemCallBack = (result: string) : void => {
    alert(result);
}

menu.addItem(itemCallBack); 

这是一个可行的例子。如果您有任何疑问,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接