Typescript 参数类型';a';和';左';不相容

Typescript 参数类型';a';和';左';不相容,typescript,generics,Typescript,Generics,我是一个新的TypeScript用户,所以请容忍我我认为这不是一个很好的解决方案。在泛型方法中使用运行时类型检查通常是不好的做法(“泛型”方法的全部要点是逻辑应该适用于提供的任何类型)。但这里有一个更友好的解决方案,可以帮助您解决当前问题: conststringcomparer=(a:T,b:T)=>ab?1 : 0; 常数numberComparer=(a:T,b:T)=>a-b; 函数getDefaultComparitor(args:T[]):comparior |未定义{ if(isS

我是一个新的TypeScript用户,所以请容忍我我认为这不是一个很好的解决方案。在泛型方法中使用运行时类型检查通常是不好的做法(“泛型”方法的全部要点是逻辑应该适用于提供的任何类型)。但这里有一个更友好的解决方案,可以帮助您解决当前问题:

conststringcomparer=(a:T,b:T)=>ab?1 : 0;
常数numberComparer=(a:T,b:T)=>a-b;
函数getDefaultComparitor(args:T[]):comparior |未定义{
if(isStringArray(args)){
返回字符串比较器作为比较器;
}else if(isNumberArray(args)){
作为比较器的返回编号比较器;
}
返回未定义;
}
函数useHeap(args:T[],comp?:Comparor):T[]{
如果(!comp){
comp=getDefaultComparitor(args);
如果(!comp){

首先,我很少看到有人经过这么多的努力来很好地格式化一个问题。BRAVO!第二,你正在混合泛型和运行时类型检查,这通常是坏的风格。你已经检查了这些数值,但不是那个代码> T < /CUD>扩展<代码>号码<代码>(例如考虑<代码> USEHAP([1,2,3])< /代码>)谢谢@p.s.w.g再次感谢您如何改进代码(&“@SungM.Kim我第一次尝试
ComparitorParameter=T扩展字符串| number?未定义的| Comparor:Comparor
,但它仍然要求您为
useHeap([1,2,3])指定第二个参数
,因此,对于
string | number
我允许一个可能为空的数组。您也可以使用
ComparitorParam=Parameters0:(comp:Comparator)=>0)>
,但这看起来更混乱和笨拙(至少在我看来),所以我没有在答案中提到它。哇