3

我正在学习 TypeScript 中的环境模块,使用 MailApp 的一个小玩具示例,它是 Google Apps Script 中的一个全局模块(参见此处)。我正在做的只是用 VS 代码编写我的代码,用 webpack 编译它,然后将其作为 ES5 代码复制到 Apps Script 控制台中运行。

我的问题:对于下面的代码,当我将环境模块声明移出到 .d.ts 文件并使用三斜杠指令来引用它时,TSC 和 VS 代码都可以识别这一点。但是,webpack + ts-loader(awesome-typescript-loader 也有同样的问题)总是显示错误:

Module not found: Error: Can't resolve 'MailApp'

我在这里错过了什么吗?

我的声明文件:root/src/AppsScriptTypes.d.ts

declare module 'MailApp' {
  export interface EmailOptions {
    bcc?: string;
    cc?: string;
    htmlBody?: string;
    name?: string;
    noReply?: boolean;
    replyTo?: string;
  }
  export function sendEmail(
    recipient: string,
    subject: string,
    body: string,
    options?: EmailOptions): void;
 }

我的主文件:root/src/SendMail.ts

/// <reference path="./AppsScriptTypes.d.ts" />
import * as MailApp from 'MailApp';

MailApp.sendEmail(
  'myemail@gmail.com',
  'Sample Email Title',
  'Sample Email Body', {
    noReply: true,
    cc: 'myemail@gmail.com',
  });

我的根/webpack.config.js:

module.exports = {
  entry: './src/SendMail.ts',
  output: {
    filename: 'bundle.js',
    path: __dirname,
  },
  resolve: {
    extensions: ['.ts', '.tsx',],
  },
  module: {
    rules: [
      {
        loader: 'ts-loader',
        test: /\.(t|j)sx?$/,
        exclude: /node_modules|MockMailApp\.js/,
      }
    ]
  },
};

当我不使用三斜杠引用 + 单独文件并将声明移动到 SendMail.ts 文件中时,webpack + ts-loader 没有错误,但这当然不是可取的:

declare module MailApp {
  ...
} // this works for webpack when shown like this in SendMail.ts

MailApp.sendEmail(...);
...

我在某处缺少配置吗?我正在使用 webpack 2.4.1、TypeScript 2.3、ts-loader 2.0.3。谢谢你的帮助!

4

1 回答 1

0

我不确定它是否会有所帮助,但您可以尝试以下方法之一

  1. 将“.d.ts”添加到 webpack.config.js 文件中的 resolve.extensions
  2. 在 AppsScriptTypes.d.ts 文件中使用“.ts”扩展名而不是“.d.ts”
于 2017-05-07T03:25:01.357 回答