打字稿如何找到.d.ts文件?

时间:2019-10-19 03:33:59

标签: typescript webpack

我是一名新的打字稿开发人员,并且正在使用打字稿和webpack开发一个项目,一些用js编码的库需要一个.d.ts文件,但是我很困惑webpack如何找到{{ 1}}文件中包含.d.ts

这是我的猜测:

  1. webpack将在“ node_modules”中找到名为import * as PIXI from 'pixi.js'的文件夹,并找到 package.json,如果它具有pixi.js属性,只需选择该文件作为.d.ts文件即可。

  2. 如果无法以1的方式找到.d.ts文件,则转到node_modules / @ types(或其他自定义文件夹),查找是否存在具有相同名称的文件夹types,然后选择pixi.js文件作为index.d.ts文件。

  3. 顺便说一句,我在index.d.ts中发现他们使用.d.ts,为什么?我知道官方不推荐使用module关键字(由module代替)。

1 个答案:

答案 0 :(得分:0)

.d.ts文件通常放置在.ts文件附近,它提供输入内容。尽管ts编译器只是将文件与模块名称匹配,但即使它们不相邻也可以单独使用。

它与webpack的工作原理相同,如果您只是将输入指向它们,编译器就会知道如何查找它们。

例如,我有一个名为Types的文件夹,在其中放置了我的Express应用程序的所有自定义键入。我的tsconfig看起来像

{
    "compilerOptions": {
        "noImplicitAny": true,
        "esModuleInterop": true,
        "target": "es5"
    },
    "include": [
        "app/**/*"
    ]
}

由于我的打字文件夹位于./app中,因此编译器没有问题,可以找到我的.d.ts文件,并且gulpfile.js看起来像

var gulp = require('gulp');
var ts = require('gulp-typescript');
var tsProject = ts.createProject('tsconfig.json');

gulp.task('buildTS', () => {
    return tsProject.src()
        .pipe(tsProject())
        .js.pipe(gulp.dest('build'));
});

gulp.task('ts:watch', function (cb) {
    gulp.watch('./app/**/*.ts', gulp.series(['buildTS', 'server']))
    cb(null);
});

我想使用一个名为custom-env的程序包,该程序包在@types回购中没有ts类型。所以我刚刚创建了一个包含内容的custom-env.d.ts

declare module 'custom-env';
// This is a workaround. Always provide full and correct typings.

以便我可以导入和使用它。没有此文件,从属文件将无法编译。希望这会有所帮助。