5

我认为直接从 node_modules 目录导入模块而不需要手动为其提供声明文件会很棒(让我们假设声明是由模块本身提供的)。我猜这个问题是声明附带的依赖项(文件路径可以相对于模块解析,但这会导致重复并且编译器无法处理)。目前使用节点模块非常不方便,因为从 npm 存储库进行简单安装是不够的,我们必须手动搜索声明并在我们的项目中提供它们。假设我们的项目依赖于 10 个节点模块(它们都有声明),一年后我们想更新它们。我们将不得不手动搜索新的声明并让' s 说我们有大约 20 个这样的项目(这将成为一场噩梦)。也许应该有一个选项可以直接从节点模块导入 .ts 文件?

你有什么建议吗?

这是 CodePlex 的重新发布,以听取您的意见...

4

2 回答 2

2

如果您使用 grunt-typescript,那么我有一个拉取请求,它至少为我解决了这个问题。见https://github.com/k-maru/grunt-typescript/pull/36

从拉取请求 README

使用 node_modules 中的模块(即 npm)

使用 npm 包的标准方法是提供一个定义文件,该文件将包指定到打字稿并从那里导入模块。

///<reference path="path/to/mod.d.ts" />
import mod = module('mod')

typescript编译器会将 转换import为 nodejs require

var mod = require('mod')

这非常笨拙,因为您需要知道 npm 安装包的精确路径,并且当您处理多个级别的依赖项时,npm 可以将包置于几乎任何级别。

使用node_modulesgrunt 配置中的选项,您可以只 import使用 npm 包,而无需知道 npm 安装包的确切级别,只要它是在本地而不是全局安装的。

import你的打字稿源中的一个 npm 模块做

import npmModule = module('node_modules/npmModule/foo')

这主要是由于幸运的机会。Typescript 编译器将读取 typescript 定义文件node_modules/npmModule/foo.d.ts,如果它在通往根的途中的某个时间点存在,并且如果需要,生成的 javascript 文件将包含一个requirefor 。npmModule/foo

于 2013-06-11T10:52:19.860 回答
1

我认为节点模块永远不会包含内置的打字稿支持。该语言仍然是 0.x 版本,官方描述为 alpha 版本。

尽管如此,还是有一些方法可以简化 typescript 的配置过程。Github 已经包含大量 .d.ts 文件,例如:

https://github.com/borisyankov/DefinitelyTypedhttps://github.com/soywiz/typescript-node-definitions

您可能想看看这个工具:https ://github.com/Diullei/tsd 。我从未使用过它,但它似乎几乎就是你要找的东西。

此外,我听说 .d.ts 文件的官方数据库正在计划中。不幸的是,我找不到链接,但无论如何,这可能需要一段时间才能实现。

于 2013-04-20T20:11:23.430 回答