我有一个问题,当我想使用域名时。
所以,我尝试使用我的代码的下一部分
var x = d3.time.scale()
.domain([new Date('2016-06-10'), new Date('2016-06-25')])
.rangeRound([0, 1000]);
我收到有关域名错误类型的错误...
类型'比例'不能分配给' Scale'。
类型的参数财产类型'域名'是不相容的。
输入' {():日期[]; (日期:数字[]):比例; (日期:日期[]):比例; }'不能分配给' {():number []; (值:数字[]):比例; }'
键入'日期[]'不能指定为' number []'。 输入'日期'不能分配类型'数字'。
但如果我们看看d3打字
domain(): Date[];
domain(dates: number[]): Scale<Range, Output>;
domain(dates: Date[]): Scale<Range, Output>;
域名可以采用日期数组!
如果我们禁用类型,那么一切正常。
我的代码的另一部分也有类似的问题:
var drag = d3.behavior.drag()
.on('drag', function (d) {
d3.event.sourceEvent.stopPropagation();
})
.on('dragstart', function () {
//
});
我收到有关错误的信息:
Property&#39; sourceEvent&#39;类型&#39;事件|中不存在BaseEvent&#39;
但如果我们查看类型
export var event: Event | BaseEvent;
和
interface BaseEvent {
type: string;
sourceEvent?: Event;
}
我使用打字:
&#34; d3&#34;:&#34;注册管理机构:dt / d3#0.0.0 + 20160614091820&#34;
和webpack的awesome-typescript-loader
那么,我的错误是什么?
答案 0 :(得分:1)
您是否打算使用D3 v4或D3 v3?
您发布的代码段似乎暗示D3 v3。与杰克所说的一致。
当前使用的是R4版本4定义,假设您使用的是TypeScript 2。
他引用的repo已经完全迁移到DefintitelyTyped(目前类型为2.0分支),我们主要使用它进行协作开发,而生态系统仍在不断变化......
现在通过模块获取定义只需使用
npm install @types/d3-selection --save
(如果您不发布供第三方使用,则为--save-dev)
截至昨天,npm install @types/d3 --save
还将为您提供与标准D3套装相对应的定义。
在发布过程中,从DefinitelyTyped到npm @types存在一些技术债务,因为我们不想破坏仍需要传统D3 v3.5定义的库。现在已经解决了。
安装相关定义后,只需对相应的D3模块(或d3标准软件包)使用TypeScript / ES6 import语句。
import { select, Selection } from 'd3-selection';
import * as d3Drag from 'd3-drag';
或类似的。您还可以创建自己的TypeScript模块作为模块的子集进行捆绑,如果它更方便您查看我对https://stackoverflow.com/questions/40314024/typescript-d3-v4-import-not-working
的回答如果您想在带有全局
的香草剧本中使用这些定义,情况就会略有不同如果那是你的使用案例,请告诉我,我可以添加更多信息。
答案 1 :(得分:0)
我昨天使用Typescript 2.0
和最新的@types/d3-drag
发生了这种情况。
我认为这只是打字的问题,请点击此处查看更新:https://github.com/tomwanzek/d3-v4-definitelytyped/issues
我的乐队创可贴:
let drag:any = d3.behavior.drag()...