TypeScript 3.1介绍


当前第2页 返回上一页

在 TypeScript 3.1 中使用节点模块分辨率时,当 TypeScript 破解打开package.json文件以确定需要读取哪些文件时,它首先会查看名为typesVersions的新字段。带有typesVersions字段的package.json可能如下所示:

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    ">=3.1": { "*": ["ts3.1/*"] }
  }
}

package.json告诉TypeScript检查当前版本的TypeScript是否正在运行。如果它是3.1或更高版本,它会计算出您相对于包导入的路径,并从包的ts3.1文件夹中读取。这就是{ "*": ["ts3.1/*"] }表达的意思 - 如果你现在熟悉路径映射,它的工作原理就是这样的。

因此,在上面的示例中,如果我们从"package-name"中导入,在TypeScript 3.1中运行时,我们将尝试从[...]/node_modules/package-name/ts3.1/index.d.ts(和其他相关路径)解析。如果我们从package-name/foo导入,我们将尝试寻找[...]/node_modules/package-name/ts3.1/foo.d.ts[...]/node_modules/package-name/ts3.1/foo/index.d.ts

如果我们在这个例子中没有在 TypeScript 3.1 中运行怎么办?好吧,如果typesVersions中没有匹配的字段,TypeScript会回退到types字段,因此 TypeScript 3.0 及更早版本将被重定向到[...]/node_modules/package-name/index.d.ts

匹配行为

TypeScript决定编译器和语言版本是否匹配的方式是使用Node的semver范围。

多个字段

typesVersions 可以支持多个字段,其中每个字段名称由要匹配的范围指定。

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    ">=3.2": { "*": ["ts3.2/*"] },
    ">=3.1": { "*": ["ts3.1/*"] }
  }
}

由于范围可能会重叠,因此确定应用哪种重定向是特定于订单的。这意味着在上面的示例中,即使>=3.2>=3.1匹配器都支持 TypeScript 3.2 及更高版本,反转顺序也可能有不同的行为,因此上述示例将不等同于以下示例:

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    // NOTE: this doesn't work!
    ">=3.1": { "*": ["ts3.1/*"] },
    ">=3.2": { "*": ["ts3.2/*"] }
  }
}

标签:TypeScript

返回前面的内容

相关阅读 >>

linux服务器搭建node.js环境的步骤介绍

typescript 迭代器和生成器

typescript和javascript有什么区别

typescript和javascript的区别有哪些

typescript 构建工具整合

typescript 声明文件举例

typescript 每日构建

typescript 装饰器

typescript 枚举

typescript 声明文件原理

更多相关阅读请进入《typescript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...