3

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

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

一切都很好,色彩斑斓。但是typings文件夹。

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,因为该文件的第一行将引用一个不存在的类型文件夹。让我们来看看

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

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

  export class MyClass {
   …
  }
}

那是我现在正在生成的 .d.ts 的标题。我曾尝试复制类型文件夹(使其不会被 .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 文件复制到我的类型文件夹,并将复制文件的第一行(引用)更改为我的相关类型文件夹。

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

4

2 回答 2

2

这里的问题是文件 data_model.d.ts 因为该文件的第一行将引用一个不存在的类型文件夹。

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

于 2016-01-27T06:43:42.377 回答
1

我想分享我目前用来解决这个问题的解决方案。从Visual Studio Codev0.10.8开始就有可能,因为它会搜索项目中的任何文件——而不仅仅是像以前那样在文件夹中——并“复合”一堆全局类型定义。*.d.tstypings

假设我们有这些项目:

  1. my-module(我们自己的模块,我们希望包含为依赖项)
  2. my-project(我们的项目)
  3. another-project
  4. ...

my-module定义my-module.d.ts声明文件。不要忽略它.npmignore,一旦我们将它作为依赖项导入,npm 不仅会安装源文件,还会安装定义文件

my-project结构将是:

 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- my-module
       |-- my-module.d.ts
       |-- lib
          |-- ..
 |-- typigns
     |-- node.d.ts
     |-- ...

Visual Studio Code 不仅会恢复node.d.ts(以及 typigns 文件夹下的任何文件) ,还会恢复my-module.d.ts.
请注意,我们确实忽略(将其添加到my-module/.npmignore)我们模块的 typigns 文件夹,为什么?因为这可能会生成多个node.d.ts, express.d.ts, etc 文件:一个来自模块,另一个来自项目。

此时我意识到,我.d.ts在所有项目中使用了几个(~20)定义文件,所以我决定如下:

首先,我将每个*.d.ts文件(我的模块中的文件除外)分组到一个文件夹中,例如~/workspace/typings-set. 不会有重复的元素:只有一个node.d.ts, express.d.ts, 等定义文件。
接下来,我所有的打字稿项目都会创建一个指向该文件夹的符号链接

$> ln -s ~/workspace/typings-set/typings typings

(我称之为typigns约定)

现在,my-module并且my-project有这个结构

 my-module
 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- ...
 |-- typigns =====> ~/workspace/typings-set/typings

 my-project
 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- my-module
       |-- my-module.d.ts
       |-- lib
          |-- ..
 |-- typigns =====> ~/workspace/typings-set/typings

 typings-set
  |-- README.md
  |-- tsd.json
  |-- typigns
     |-- node.d.ts
     |-- express.d.ts
     |-- socket.io.d.ts
     |-- ...
于 2016-03-02T07:55:56.307 回答