如何在typescript中导出重载函数

如何在typescript中导出重载函数,typescript,Typescript,我有一个要重载的函数,以便它根据arg1的值(其中有一个已知值列表)知道arg2的类型 一个非常粗略的例子来说明我正在尝试做什么: interface CatArgs {legs : number} interface FishArgs {fins: number} type CarOrFishArgs = CatArgs | FishArgs; type Animal = Cat | Fish; type Type = 'Cat' | 'Fish'; class Cat{ co

我有一个要重载的函数,以便它根据arg1的值(其中有一个已知值列表)知道arg2的类型

一个非常粗略的例子来说明我正在尝试做什么:

interface CatArgs {legs : number}

interface FishArgs {fins: number}

type CarOrFishArgs = CatArgs | FishArgs;
type Animal = Cat | Fish;

type Type = 'Cat' | 'Fish';

class Cat{
    constructor(args:CatArgs){}
}

class Fish {
    constructor(args:FishArgs){}
}

export declare function getAnimal(type:'Cat', args:CatArgs): Cat;
export declare function getAnimal(type:'Fish', args:FishArgs): Fish;

export function getAnimal(type:Type, args:CarOrFishArgs): Animal {
    switch (type) {
        case 'Cat':
            return new Cat(args as CatArgs);
        case 'Fish':
            return new Fish(args as FishArgs);
    }
}
但我得到了“过载签名必须都是环境或非环境的”


typescript是否支持这种类型的功能?我做错了什么?

要指定不需要声明的重载签名,请执行以下操作:

导出函数getAnimal(类型:'Cat',args:CatArgs):Cat;
导出函数getAnimal(类型:'Fish',args:FishArgs):Fish;
导出函数getAnimal(类型:type,args:CarOrFishArgs):动物{
开关(类型){
“猫”一案:
返回新的Cat(args作为CatArgs);
“鱼”案:
返回新鱼(args作为FishArgs);
}
}