我在打字稿类上有一个实例方法...
createArea = d3.area<Point>().x((d) => d.x).y0((d) => d.max).y1((d) => d.y);
这有效,但是它被解释为实例字段,因此我尝试添加类型化的lambda ...
createArea = (points:Point[]):String => d3.area<Point>().x((d) => d.x).y0((d) => d.max).y1((d) => d.y);
这不起作用
类型'Area'不能分配给类型'String'。
类型定义(@ types / d3)是否存在问题?
export function area<Datum>(): Area<Datum>;
Area()方法明确地返回一个字符串。
if (buffer) return output = null, buffer + "" || null;
这是我的package.json
"dependencies": {
"d3": "^5.5.0",
},
"devDependencies": {
"@types/d3": "^5.0.0",
},
答案 0 :(得分:0)
函数d3.area()
返回的不是String
,而是返回Area
的abject,而后者是一个接受数据数组(在您的情况下为Point[]
)的函数,并且返回String
。可以通过以下行进行检查:
const tmp = d3.area()([]); // tmp is of type string | null
因此,如果您确实确实需要字符串而不是Area
对象,则您的函数必须看起来像这样(为可读性添加了一些格式):
const createArea = (points:Point[]):String => d3.area<Point>()
.x((d) => d.x)
.y0((d) => d.max)
.y1((d) => d.y)
(points)!;
误解必须基于这样一个事实,即d3-area
模块内部不返回名为area
的函数,而是返回第一个匿名函数。这是JavaScript中的面向对象方法:类只是一个返回实例的函数(在本例中为您所指的area
函数)。