我正在学习 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。谢谢你的帮助!