Typescript中的d3.max(…)返回一个字符串

Typescript中的d3.max(…)返回一个字符串,typescript,d3.js,Typescript,D3.js,d3.min/max函数返回的是字符串,而不是数字 var nonEmptySets = []; this.data.forEach(function(ds) { //data: Array<Array<[number, number]>> if(ds && ds.length > 0) { nonEmptySets.push(ds); }

d3.min/max函数返回的是
字符串,而不是
数字

var nonEmptySets = [];
        this.data.forEach(function(ds) { //data: Array<Array<[number, number]>>
            if(ds && ds.length > 0) {
                nonEmptySets.push(ds);
            }
        })

var max = d3.max(nonEmptySets[0], function(d) { return d[1]; }); //max: string
var nonEmptySets=[];
this.data.forEach(函数(ds){//data:Array
如果(ds&&ds.length>0){
非空推(ds);
}
})
var max=d3.max(非空集[0],函数(d){返回d[1];})//马克斯:字符串

我知道我可以将max的值转换为
数字
,但我不明白为什么函数返回
字符串

D3。max不执行任何类型转换。如果您输入字符串,它将返回字符串

此外,使用自然顺序而不是数字顺序对元素进行比较。例如,字符串[“20”,“3”]的最大值为“3”,而数字[20,3]的最大值为20


我也面临同样的问题

在深入研究
@types/d3
的源代码后,我发现有4个
d3.max的重载:

/**
 * Return the maximum value in the array of strings using natural order.
 */
export function max(array: ArrayLike<string>): string | undefined;

/**
 * Return the maximum value in the array of numbers using natural order.
 */
export function max<T extends Numeric>(array: ArrayLike<T>): T | undefined;

/**
 * Return the maximum value in the array using natural order and a projection function to map values to strings.
 */
export function max<T>(array: ArrayLike<T>, accessor: (datum: T, index: number, array: ArrayLike<T>) => string | undefined | null): string | undefined;

/**
 * Return the maximum value in the array using natural order and a projection function to map values to easily-sorted values.
 */
export function max<T, U extends Numeric>(array: ArrayLike<T>, accessor: (datum: T, index: number, array: ArrayLike<T>) => U | undefined | null): U | undefined;
  • 或者像这样覆盖
    T
    U

    var nonEmptySets: Array<Array<[number, number]>> = [];
    
    var max = d3.max<[number, number], number>(nonEmptySets[0], function(d) { return d[1]; 
    });
    
    var max=d3.max(非空集[0],函数(d){返回d[1];
    });
    

  • 然后您会得到
    max:number

    非空集的定义是什么。我看到的max的定义返回的类型与您传入的回调返回的类型相同,因此无论
    d[1]
    的类型是什么,都将是
    max
    的返回类型(因为泛型)您的nonEmptySets[0]对象看起来如何?