如何在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

解决方法

这对我有用:

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);