javascript - 使用 TypeScript 2.0 导入 js 文件

标签 javascript node.js typescript typescript2.0

摘要

我正在尝试从外部位置导入“.js”文件(即 node_modules)我正在尝试使用 commonjs 模块模式执行此操作,但是 import在我在同一文件夹中的“.js”文件附近添加“.d.ts”文件之前,不想使用“.js”文件类型。

但问题是我不想用我的“.d.ts”文件影响任何 node_modules。我希望它位于另一个文件夹中,与 node_modules 分开,但一旦我这样做, typescript 编译器就会抛出错误:

示例

我有以下文件夹结构:

|- DTS
|   |- y.d.ts
|- main.ts
|- y.js

y.js有以下内容

module.export = function (x) {
    console.log(x);
};

y.d.ts有以下内容

export interface Y {
    (x): any;
}
declare let y: Y;
export default y;

ma​​in.ts有以下内容

import * as y from './y'

现在当我尝试编译 ma​​in.ts 时:

tsc -m commonjs -t ES2015 main.ts

我会得到一个错误:

x.ts(1,20): error TS2307: Cannot find module './y'.

问题

如何导入“.js”文件并能够定义它的“.d.ts”声明,同时让两个文件位于不同的位置。


编辑

Here is the link to example project .请务必使用 TypeScript 2.0 版编译器。和上面的 tsc 命令查看错误。

最佳答案

注意:official recommendation for proving your type definitions采用与下面介绍的方法略有不同的方法。 我相信下面的方法稍微好一些,因为 *.d.ts 文件实际上与最终产品相同。

在类型检查(构建时)期间,TypeScript 使用 *.ts 文件并且(大部分)忽略 *.js 文件。 让我举一个例子来激发你提出的(我相信)。 假设存在一个非常好的 JavaScript 库,遗憾的是它没有类型(例如 N3)。 已通过 npm 安装,因此:

npm install n3 --save

这通常被添加到 ./node_modules/n3/... 和 project.json。 如前所述,类型不存在,需要手动添加。 为此,我创建了一个 ./@types/n3.d.ts 文件。 就我们的目的而言,定义实际上是什么并不特别重要,但以下内容是一个好的开始:

declare namespace N3 {
}

declare module "n3" {
    export = N3;
}

现在回答你的问题。 更新“tsconfig.json”:

...
"compilerOptions": {
    "typeRoots": [
      "node_modules/@types",
      "@types"
    ],
...
"paths": {
  "*": [
    ...
    "./@types/*"
  ]

仍然需要处理运行时解析以查找相应的 *.js 文件,但这是与您提出的问题不同的问题。

作为引用,您可以找到 What is new in TypeScriptthis discussion thread有用。

这种方法适用于全局变量,但不适用于模块。

更新“tsconfig.json”:

...
"paths": {
  "*": [
    ...
    "./@types/*"
  ],
  "foo": [ "./@types/foo.d.ts" ]
  },
 ...

关于javascript - 使用 TypeScript 2.0 导入 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38445132/

相关文章:

javascript - Knockout.js 动态组合表

javascript - 如何多次调用 ruby​​ 函数

javascript - node.js/Express/Connect/Socket.io的关系

javascript - 枚举成员如何在 TypeScript 中使用别名?

javascript - Rails 服务器/控制台错误 - 没有要加载的文件 - CoffeeScript (LoadError)

javascript - 如何创建 JSON 数组

JavaScript 服务器端?

javascript - 如何在 Javascript 中设置 JPEG/PNG 图像的分辨率/密度?

javascript - 未知的编译器选项包括和排除

javascript - 在 Angular 15 项目中运行 Scully?