针对“{}”的打字稿类型

时间:2018-06-14 21:34:22

标签: angular typescript d3.js

我在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]; })无法读取未定义的属性。但是,尽管有这样的错误,一切都运行良好。

1 个答案:

答案 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]; })