将 Typescript 2 @Types 与 typescript 1.8.10 一起使用

Posted

技术标签:

【中文标题】将 Typescript 2 @Types 与 typescript 1.8.10 一起使用【英文标题】:Using Typescript 2 @Types with typescript 1.8.10 【发布时间】:2017-01-13 15:45:06 【问题描述】:

目前我正在尝试在我的项目中使用 d3-drag v4 类型。 正在使用 Ts 1.8.10,尚未准备好迁移到 TS2 测试版。

d3-v4 类型库位于此处: https://github.com/tomwanzek/d3-v4-definitelytyped

我尝试使用以下方法安装类型:

typings install d3-drag=github:tomwanzek/d3-v4-definitelytyped/src/d3-drag/index.d.ts#4d09073c046b6444859c66ff441f1e7691777d0f --save

但我收到以下错误:

打字错误!引起的 /tomwanzek/d3-v4-确定类型/47eae6d/src/d3-selection.d.ts 以 404 响应,预计等于 200

我发现有人在这里问同样的问题:

https://github.com/tomwanzek/d3-v4-definitelytyped/issues/93

但它没有回答我的问题,因为我还不能迁移到 ts2。 无论如何在 TS 1.8.10 中使用@types 吗?

【问题讨论】:

这似乎是typings 的 url 解析中的错误/意外功能。我会考虑在 Typings github repo 上打开一个问题。 【参考方案1】:

同时我创建了一个 d.ts 文件以便能够使用拖动。 没有智能感知和类型检查,但至少我可以使用拖动库。

 declare var d3Drag;
 declare module 'd3-drag' 
 
export = d3Drag;
 

我在我的代码中这样使用它:

import * as d3Drag from 'd3-drag';

...
let dragBehaivor = d3Drag.drag().on("start", dragStartFunction);

【讨论】:

【参考方案2】:

您可以获取必要的文件

npm install @types/d3-selection --save

这会将定义文件夹放在 node_modules/@types 中。然后,您应该能够将 d3-selection 文件夹复制到 typings 文件夹并在那里添加对 index.d.ts 文件的引用。我没有尝试过,因为我正在迁移到 TS2,但它似乎应该可以工作。

【讨论】:

【参考方案3】:

简短的回答是,很遗憾,在 TypeScript 1.8.x 中无法将 @types 用于 D3。有两个原因:

    TS2 编译器为使用从 npm @types 安装的定义而执行的整个定义/模块解析在 TS 1.8.x 中不可用 您所指的定义https://github.com/tomwanzek/d3-v4-definitelytyped 现在已迁移到DefinitelyTyped/types-2.0 分支。它们是为@types/d3(标准D3 v4 Bundle)、@types/d3-selection@types/d3-drag 等提供@types 的。它们都写在定义模块结构中,仅从TS 2 开始支持。它们还使用其他TS 功能,例如 this 输入函数上下文。

由于这两个原因,它们不适用于 TS 1.8。

希望您在最初发布后能够升级,因为 TS 2 不再是测试版。

【讨论】:

以上是关于将 Typescript 2 @Types 与 typescript 1.8.10 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在 TypeScript 2 中使用@types

Ts高级类型(Utility Types)

如何安装与旧版 TypeScript 兼容的 @types?

Typings 与 @types NPM 范围

使用 jQuery 和 Typescript 2

在 Typescript 2.0 中使用 @types 类型定义