我在Angular2中收到花括号的类型错误,与D3交互:
Sub test()
Dim ArrTopValues()
ArrTopValues = Application.Evaluate("=INDEX(LARGE(A1:A11,{1,2,3}),0)")
End Sub
错误是:
.attr("cy", function (data) { return x([data.lon,data.lat])[1]; })
error TS2339: Property 'lon' does not exist on type '{}'
error TS2339: Property 'lat' does not exist on type '{}'
行位于函数内,attr
是别名x
let x = this.projection;
返回功能。 this.projection
是一个对象。
data
(此处没有任何错误):
circles
当缩放时,调用“缩放”功能并将drawMarkers(map,stations,projection) {
map.selectAll("circle")
.data(stations)
.enter()
.append("circle")
.attr("cx", function (d) { return projection([d.lon,d.lat])[0]; })
.attr("cy", function (d) { return projection([d.lon,d.lat])[1]; })
.attr("r", "1px")
.attr("fill", "white")
.attr('style','cursor: pointer;')
.on('click',() => {
this.flyoutservice.changeFlyoutState(true);
});
}
重新绘制到新位置(这是错误发生的地方):
circles
编译时会触发错误,但运行时工作/运行正常。
如果我这样做:map
.selectAll('circle')
.attr("cx", function (data) { return x([data.lon,data.lat])[0]; })
.attr("cy", function (data) { return x([data.lon,data.lat])[1]; })
.attr('r',(d) => {
let cr = parseInt(d3.select(this).attr('r'), 10);
let scale = d3.event.transform['k'];
return 1 / d3.event.transform['k'];
});
我的编译错误消失但我在运行时遇到错误.attr("cx", function (data) { return x([data['object'].lon['number'],data['object'].lat['number'])[0]; })
无法读取未定义的属性。但是,尽管有这样的错误,一切都运行良好。
答案 0 :(得分:3)
您是否尝试在data
函数中定义attr
的类型,以便Typescript将其识别为属性?
.attr("cx", (data: { lon: number, lat: number }) => { return x([data.lon,data.lat])[0]; })
.attr("cy", (data: { lon: number, lat: number }) => { return x([data.lon,data.lat])[1]; })
为了保持一致性,我也会以同样的方式改变第一个功能:
.attr("cx", (d: { lon: number, lat: number }) => { return projection([d.lon,d.lat])[0]; })
.attr("cy", (d: { lon: number, lat: number }) => { return projection([d.lon,d.lat])[1]; })