我创建了一个项目(名为 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/