首页 > 解决方案 > 如何在 Typescript 中对重载函数进行命名导出?

问题描述

pickCard.ts

这是来自的示例:

https://www.typescriptlang.org/docs/handbook/functions.html#overloads

function pickCard(x: { suit: string; card: number }[]): number;
function pickCard(x: number): { suit: string; card: number };
function pickCard(x: any): any {
  // Check to see if we're working with an object/array
  // if so, they gave us the deck and we'll pick the card
  if (typeof x == "object") {
    let pickedCard = Math.floor(Math.random() * x.length);
    return pickedCard;
  }
  // Otherwise just let them pick the card
  else if (typeof x == "number") {
    let pickedSuit = Math.floor(x / 13);
    return { suit: suits[pickedSuit], card: x % 13 };
  }
}

export pickCard; // DOES NOT WORK

我不能使用这样的函数表达式:export const pickCard = () => {};因为重载不适用于函数表达式。

问题

如何对pickCard函数进行命名导出。注意:名字应该是pickCard

标签: javascripttypescriptexportoverloading

解决方案


这对我有用:

export function pickCard(x: { suit: string; card: number }[]): number;
export function pickCard(x: number): { suit: string; card: number };
export function pickCard(x: any): any {
  // Check to see if we're working with an object/array
  // if so, they gave us the deck and we'll pick the card
  if (typeof x == "object") {
    let pickedCard = Math.floor(Math.random() * x.length);
    return pickedCard;
  }
  // Otherwise just let them pick the card
  else if (typeof x == "number") {
    let pickedSuit = Math.floor(x / 13); 
    return { suit: suits[pickedSuit], card: x % 13 };
  }
}

在其他文件中使用:

import { pickCard } from ".";

pickCard([{ suit: 'test', card: 10 }]);
pickCard(21);

推荐阅读