如何使用 Typescript 指向函数

发布日期:2026-07-16 02:59:02  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-16 02:59:02  
0

介绍

在 TypeScript 中编写函数是描述如何做某事的一项基本任务。根据上下文,有时需要引用或指向函数。在本指南中,您将学习两种指向函数的方法:

  • 首先,通过声明一个具有类型的变量。
  • 其次,通过引入一个接口来描述变量的函数类型。当您需要声明具有与函数相同签名的新变量并在特定上下文或域中使用它时,这很有用。

我们将处理一个金融交易的代码示例。

方法 1:无接口

假设printTransactionDetails()是一个接受三个参数的函数:string类型的transactionTypenumber类型的amountstring类型的category。根据transactionType的值,它决定交易是贷记还是借记,并为其分配SpentEarned的值。最后,它生成一个字符串并在返回之前打印在控制台上。

      function printTransactionDetails(transactionType: string, amount: number, category: string): string {
    let creditOrDebit: string = (transactionType === "debit") ? 'Spent' : 'Earned';
    let result: string = creditOrDebit + " $" + amount + " in " + category;
    console.log(result);
    return result;
}
    

现在,假设您需要一个变量printFoodTransaction来打印食品交易的详细信息。它具有函数类型,其签名与printTransactionDetails()函数匹配。

您按如下方式声明。

      let printFoodTransaction: (transactionType: string, amount: number, category: string) => string;
    

如何将printFoodTransaction指向printTransactionDetails()函数?您可以通过将printTransactionDetails分配给printFoodTransaction
来实现

      printFoodTransaction = printTransactionDetails;
    

要打印食品交易,请调用printFoodTransaction函数并传递transactionTypeamountcategory的值

      printFoodTransaction("debit", 100, "Food")
    

确保您的代码看起来像这样。

      function printTransactionDetails(transactionType: string, amount: number, category: string): string {
    let creditOrDebit: string = (transactionType === "debit") ? 'Spent' : 'Earned';
    let result: string = creditOrDebit + " $" + amount + " in " + category;
    console.log(result);
    return result;
}

let printFoodTransaction: (transactionType: string, amount: number, category: string) => string;
printFoodTransaction = printTransactionDetails;
printFoodTransaction("debit", 100, "Food")
    

当您在编辑器或命令行中运行代码时,您应该看到下面的输出。

      Spent $100 in Food
    

如果您需要另一个变量(例如printUtilityTransaction)来打印实用程序类别的交易详细信息,则需要再次声明其类型,通过分配值将其指向printTransactionDetails函数,然后使用三个参数调用printUtilityTransaction函数。

      let printUtilityTransaction: (transactionType: string, amount: number, category: string) => string;
printUtilityTransaction = printTransactionDetails;
printUtilityTransaction("credit", 80, "Utilities");
    

这次,当您运行代码时,您应该看到下面的输出。

      Spent $100 in Food
Earned $80 in Utilities
    

这是在 TypeScript 中将变量指向函数的一种方法。这种方法没错,但是您在描述每个变量的类型时(printFoodTransactionprintUtilityTransaction)会发现存在代码重复。

第二种方法将解决这个问题并使您的代码可重用。

方法 2:使用接口

您可以使用 TypeScript 接口,而不必重复定义类型。这里,transactionPrinter是一个描述函数类型的接口。这就像声明一个带有参数列表和返回类型的函数。

每个参数都需要一个名称和其对应的类型,这有助于定义与代码的契约。

      interface transactionPrinter {
    (transactionType: string, amount: number, category: string): void;
}
    

定义接口后,printFoodTransactionprintUtilityTransaction这两个变量现在可以使用此函数类型。printFoodTransactionprintUtilityTransaction都是transactionPrinter类型。您可以在声明时它们分配一个函数值printTransactionDetails(相同类型)。它使您的代码简洁、可重用且易于阅读。

      let printFoodTransaction: transactionPrinter = printTransactionDetails;
printFoodTransaction("debit", 100, "Food");

let printUtilityTransaction: transactionPrinter = printTransactionDetails;
printUtilityTransaction("credit", 80, "Utilities")
    

确保重构后的代码如下所示:

      function printTransactionDetails(transactionType: string, amount: number, category: string): string {
    let creditOrDebit: string = (transactionType === "debit") ? 'Spent' : 'Earned';
    let result: string = creditOrDebit + " $" + amount + " in " + category;
    console.log(result);
    return result;
}

interface transactionPrinter {
    (transactionType: string, amount: number, category: string): void;
}

let printFoodTransaction: transactionPrinter = printTransactionDetails;
printFoodTransaction("debit", 100, "Food")

let printUtilityTransaction: transactionPrinter = printTransactionDetails;
printUtilityTransaction("credit", 80, "Utilities");
    

运行此代码时您应该看到下面的输出。

      Spent $100 in Food
Earned $80 in Utilities
    

结论

在本指南中,您学习了两种在 TypeScript 中指向函数的方法。使用小型代码库或程序时,您可以选择其中任何一种方法。在复杂的应用程序中,使用接口描述函数类型使您能够使用 DRY(不要重复自己)原则编写代码。它允许您在代码中定义契约并执行类型检查,尤其是使用不支持开箱即用强类型的 JavaScript。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据