Typescript+webpack:typescript 没有为 index.d.ts 发出任何输出

zer*_*oin 5 typescript

我按照本教程成功设置了 typescript+webpack(无反应)。一切都很好,直到我将 index.d.ts 文件添加到我的组件文件夹中,我用它来导出我的所有模块,例如:

export * from "./MyClass1";
export * from "./MyClass2";
export * from "./MyClass2";
Run Code Online (Sandbox Code Playgroud)

然后我导入它:

import * as MyLib from "./components";
Run Code Online (Sandbox Code Playgroud)

代码提示和一切在 sublime 编辑器中正常工作。

最初,当我运行它时,我有:

无法解析“文件”或“目录”。/components

所以我在 webpack.config.js 的扩展中添加了 d.ts:

 resolve: {
        extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js", ".d.ts"]
    },
Run Code Online (Sandbox Code Playgroud)

现在,当我运行 webpack 时,出现此错误:

Typescript 没有为 [...]\index.d.ts 发出任何输出

我应该如何解决这个问题?

N. *_*sev 13

在这个特定问题中,内容index.d.ts不是定义而是模块,应该已移入index.ts文件。我还遇到了错误“typescript 没有为 index.d.ts 发出输出”,但有有效的声明文件。

它似乎ts-loader试图将.d.ts文件添加到最终包中,但没有发现要添加的内容,因为它们只包含构建期间类型检查所需的声明。

对我来说,工作的解决方案不是将.d.ts文件传递给ts-loader而是传递给一些什么都不做的加载器,例如ignore-loader。我的对应规则webpack.config.js是:

{
    test: /\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules|\.d\.ts$/
},
{
    test: /\.d\.ts$/,
    loader: 'ignore-loader'
},
Run Code Online (Sandbox Code Playgroud)

ts-loader 如果您使用 ES2018,可以稍微不同地配置,其中添加了正则表达式的负向后视:

{
    test: /(?<!\.d)\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules/
},
//same ignore-loader config here
Run Code Online (Sandbox Code Playgroud)


bas*_*rat 5

索引.d.ts

这是一个声明文件。声明文件没有 javascript 发出。

使固定

通过将其从 webpack 中排除(例如将其重定向到ignore-loader),确保该.d.ts文件不是所需发射的一部分

{
    test: /\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules|\.d\.ts$/
},
{
    test: /\.d\.ts$/,
    loader: 'ignore-loader'
},
Run Code Online (Sandbox Code Playgroud)

  • 请解释更多。事实上,N. Kudryavtsev 的回答更有帮助,尽管感觉有点像是在回避这个问题。我不清楚地检查了您的资源,并且[this](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)说默认情况下包含`.d.ts`,所以我不通过将其添加到“编译上下文”来了解您的意思。 (7认同)