【问题标题】:How to adjust module order in typings.json如何在 typings.json 中调整模块顺序
【发布时间】:2016-05-20 20:28:59
【问题描述】:

我正在使用typings 来加载类型定义。我的项目使用 bluebird 作为 promise 实现。这两行在我的typings.json

"Promise": "github:DefinitelyTyped/DefinitelyTyped/bluebird/bluebird.d.ts#dd328830dddffbe19e9addd7cf8532cbd3600816",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#48c1e3c1d6baefa4f1a126f188c27c4fefd36bff",

typings(1.0.3 版)生成以下typings/index.d.ts

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

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

error TS2339: Property 'exists' does not exist on type 'Promise<IResourcePatched> | Promise<string>'

但是,代码是正确的并且以前可以工作。现在我发现,如果我将typings/index.d.ts 中两行的顺序切换为先引用bluebird,我的程序就可以像以前一样编译和工作......

显然 tsc 只接受它首先看到的 Promise 的定义,并且来自 node 的 Promise 定义似乎与来自 bluebird 的定义略有不同。

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

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

更新:我只是尝试更改 typings.json 中的分型顺序,但 index.d.ts 中的节点分型总是出现在 Promise 之前。它们似乎是按字母顺序排列的……

更新 2:它似乎不是 node 中的 Promise 定义,而是模块“es6-shim”中的一个定义,这是 angular2 所必需的依赖项。所以其他名字,同样的问题:顺序。

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这里的顺序不是问题,问题是Promise 有两个相互冲突的定义。具体来说,当您定位es6/es2015 时,TypeScript 使用的标准Promise 定义与es6-shim 定义的不匹配。要么将 TypeScript 配置为以 es5 为目标,要么放弃 es6-shim,Angular2 快速入门似乎是前者。

    【讨论】:

    • 这不可能是原因,因为在我的 tsconfig.json 中,我将其配置为为 es5 生成。你是对的,有两个相互冲突的定义,但它们在 es6-shim 和 Bluebird 中,都包含在外部(以前的环境)定义中。那么还有一个问题:如何处理这种情况?
    • 我无法移除 es6-shim,因为我想为 es5 生成并且我无法移除 Bluebird,因为我想使用它的附加 Promise/A+ - 功能(map、reduce、each、some、. ..).
    • @user5876340 es6-shim 类型定义本质上必须是环境的,因为它们引入的类型是全局的。然而,Bluebird 类型定义有两种变体,DT 中的旧环境(您已安装)和 NPM 中的新环境(不尝试重新定义 Promise)。从 NPM 重新安装 Bluebird 的类型定义,您应该能够解决这些冲突。
    • 是的,但这需要我从每个模块中要求 Promise 作为蓝鸟,而不是依赖它全局替换 Promise。特别是在与其他依赖于返回的承诺是蓝鸟承诺的 JS 模块混合时,当您忘记在一个模块中将 Promise 作为蓝鸟导入时,这种方法会默默地失败,因为这样会返回一个正常的 es6-promise...
    【解决方案2】:

    我发现的内容似乎对打字版本 1.0.3 有效,但在后续版本中可能不可靠,因此请小心处理。

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

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

    大字母似乎总是排在小字母之前(A-Za-z),因此字母顺序可能意味着“ASCII 表中的顺序”。我没有查看源代码来了解它究竟做了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2014-11-29
      • 2015-10-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多