如何在typings.json中调整模块顺序

时间:2016-05-17 13:02:54

标签: typescript

我正在使用typings来加载类型定义。我的项目使用bluebird作为promise实现。这两行都在我的cv::Mat image = Mat(cv::Size(imageWidth, imageHeight), CV_MAKETYPE(CV_8U, bytesPerPixel), memory->getSharedMemory()).clone();

typings.json

typings(版本1.0.3)生成以下"Promise": "github:DefinitelyTyped/DefinitelyTyped/bluebird/bluebird.d.ts#dd328830dddffbe19e9addd7cf8532cbd3600816", "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#48c1e3c1d6baefa4f1a126f188c27c4fefd36bff",

typings/index.d.ts

编译时,tsc会在我使用Promise的所有地方抱怨,例如:用:

/// <reference path="globals/node/index.d.ts" />
/// <reference path="globals/Promise/index.d.ts" />

然而,代码是正确的并且之前有效。现在我发现,如果我在error TS2339: Property 'exists' does not exist on type 'Promise<IResourcePatched> | Promise<string>' 中切换两行的顺序以首先引用蓝鸟,我的程序就像以前一样编译和工作......

显然,tsc只是采用Promise的定义,它首先看到它,而节点的Promise定义似乎与bluebird的定义略有不同。

问题是:如何实现,该类型按照我需要的顺序列出typings/index.d.ts中的依赖项,或者如何从节点的定义中排除Promise声明?

PS:有足够声望的人可以在StackOverflow上为打字添加标签吗?

更新:我只是尝试更改index.d.ts中输入的顺序,但index.d.ts中的节点类型始终显示在Promise之前。它们似乎按字母顺序排列......

更新2 :它似乎不是节点中的Promise定义,而是模块中的一个定义&#34; es6-shim&#34;,这是angular2所需的依赖项。所以其他名称,同样的问题:订单。

注意:TypeScript-Compiler配置为生成es5代码。

2 个答案:

答案 0 :(得分:0)

订单不是这里的问题,问题是Promise有两个相互矛盾的定义。具体而言,当您定位Promise / es6时,TypeScript使用的标准es2015定义与es6-shim定义的定义不匹配。要么将TypeScript配置为目标es5,要么将沟渠es6-shim配置,Angular2快速启动似乎可以执行前者。

答案 1 :(得分:0)

我发现的内容似乎对于1.0.3版本有效,但在其他版本中可能无法释放,因此请小心处理。

typings/index.d.ts中引用路径的顺序似乎基于globalDependencies - typings.json对象中对象键名称的字母顺序。密钥的名称似乎没有其他用途。因此,重命名对象键以使订单符合您的需求似乎暂时是一个可行的解决方案。

Typescript似乎保留了全局模块的最后定义(至少在版本1.8.10中)。

大字母似乎总是在小写字母(A-Za-z)之前排序,因此字母顺序可能意味着&#34;在ASCII表格中排序&#34;。我没有查看源代码以找出它的确切功能。