node.js - 使用 typescript 创建 Node 模块,并将其作为依赖项导入 : Duplicate identifier (TS2300)

标签 node.js typescript node-modules tsd

我创建了一个项目(名为 data_model),其中包含一些在我的其他项目中有用的类。 我创建了一个完整的 gulpfile.js,它不仅将我的 .ts 编译成 .js,而且创建了一个统一的 .d.ts 文件导出我的符号,文件名为 data_model.d.ts 并且将位于项目的根目录中。

现在,我创建第二个项目,我们称它为 my_cool_api,它在其依赖项中定义了对 data_model
的 git 的依赖项 运行 npm install,.js 文件被下载到我的 node_modules

一切都美好而多彩。但是打字文件夹。

my_cool_api

 |—— package.json
 |—— …
 |—— app.ts 
 |—— node_modules
    |—— data_model
        |—— data_model.d.ts
        |—— index.js 
        |—— lib
            |—— my_class.js 
 |—— typings
    |—— tsd.d.ts
        |—— node
        |—— …

这里的问题是文件 data_model.d.ts 因为该文件的第一行将引用一个 typings 文件夹,而该文件夹没有存在。我们来看看

///<reference path=“typings/mongoose/mongoose.d.ts" />

declare module 'data_model' {
  import mongoose = require('mongoose');

  export class MyClass {
   …
  }
}

这是我现在生成的 .d.ts 的标题。我曾尝试复制 typings 文件夹(使其不被 .npmignore 忽略,将在 npm 安装期间安装它)创建以下内容

 |—— package.json
 |—— …
 |—— app.ts 
 |—— node_modules
    |—— data_model
        |—— data_model.d.ts
        |—— typings <<<<<<<<<<<<<<<<<<< ADDED
            |—— tsd.d.ts
              |—— node
              |—— ...
        |—— index.js 
        |—— lib
            |—— my_class.js 
 |—— typings
    |—— tsd.d.ts
        |—— node
        |—— …

但这会给我一百个“重复错误”(我猜是因为周围会有几个 node.d.ts 文件)。例如:

[16:44:33] [tsc] > /my_cool_api/typings/node/node.d.ts(1553,9): error TS2300: Duplicate identifier 'cleartext'.

我现在的解决方案是将我在 node_modules 中找到的任何 .d.ts 文件复制到我的 typings 文件夹,并将复制文件的第一行(引用)更改到我的相关 typings 文件夹。

应该有办法做到这一点。 (我也尝试过使用 tsd link 命令)
任何帮助将不胜感激。

最佳答案

The problem here is the file data_model.d.ts because the very first lines of that file are going to make a reference to a typings folder which doesn’t exist.

不要这样做,通常避免引用路径,但对于第三方类型尤其如此。只需将 tsd.d.ts 直接传递给 TypeScript 编译器(或者在 tsconfig.json 中引用它,如果有的话)。您必须在 app 类型中重新安装 data_model 中使用的类型(至少是任何外部可见的类型)。是的,这很糟糕,但是希望以 Typings 的形式出现在地平线上.

关于node.js - 使用 typescript 创建 Node 模块,并将其作为依赖项导入 : Duplicate identifier (TS2300),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32379053/

相关文章:

Node.js、Synchronize.js 和返回值

javascript - 为什么我的复选框在点击后没有更新?

node.js - npm runject 后无法使用 JSX

javascript - Grunt build 破坏了我编译的 javascript

node.js - 在 Node-js : app. 渲染 ('filename' 中)在内部服务器错误的 chrome 上生成错误。

node.js - 在没有 sudo 的情况下安装 Node.js/npm 的最佳方法

Angular 搜索过滤管道,用于全句子搜索,无论词序如何

function - TypeScript函数返回类型中的关键字 "is"

npm 命令不起作用,显示错误 "Cannot find module ' strip-ansi''

php laravel/vuejs 部署我的 vuejs View 未渲染