[英]TypeScript and d3 domain type
我有一個問題,當我想使用域名時。
所以,我嘗試使用我的代碼的下一部分
var x = d3.time.scale()
.domain([new Date('2016-06-10'), new Date('2016-06-25')])
.rangeRound([0, 1000]);
我收到有關域的錯誤類型的錯誤...
“Scale”類型的參數不能分配給“Scale”類型的參數。
屬性“域”的類型不兼容。
輸入'{():Date []; (日期:數字[]):比例; (日期:日期[]):比例; }'不能賦值給'{():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 () {
//
});
我得到錯誤:
類型'Event |上不存在屬性'sourceEvent' BaseEvent”。
但是如果我們看一下類型
export var event: Event | BaseEvent;
和
interface BaseEvent {
type: string;
sourceEvent?: Event;
}
我用的是打字:
“d3”:“注冊表:dt / d3#0.0.0 + 20160614091820”
和webpack的awesome-typescript-loader
那么,我怎么了?
您是否打算使用D3 v4或D3 v3?
你發布的代碼片段似乎意味着D3 v3。 與傑克所說的一致。
假設您使用的是TypeScript 2,則可以使用當前的D3版本4定義。
他引用的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-的回答工作的
如果你想在帶有全局的vanilla腳本中使用定義,情況就會略有不同
如果這是你的用例讓我知道,我可以添加更多信息。
我昨天使用Typescript 2.0
和最新的@types/d3-drag
發生了這種情況。
我認為這只是一個問題,請點擊此處查看更新: https : //github.com/tomwanzek/d3-v4-definitelytyped/issues
我的創可貼:
let drag:any = d3.behavior.drag()...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.