导入不使用TypeScript导出的AMD模块

tow*_*8ie 5 javascript amd typescript

那个设定

我正在尝试使用TypeScript加载现有的AMD模块.

为了演示我的问题,这里有一个app.ts加载名为的AMD模块的文件my_amd_module.js:

// app.ts

import * as amd_func from './my_amd_module';

function main(): void {
  console.log(amd_func());
}

main();
Run Code Online (Sandbox Code Playgroud)

使用以下TypeScript配置:

// tsconfig.json

{
  "compileOnSave": true,
  "compilerOptions": {
    "allowJs": true,
    "outDir": "build",
    "sourceMap": true,
    "target": "es5"
  },
  "exclude": [
    "node_modules",
    "build"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Webpack将app.ts文件捆绑在一个名为app-bundle.js可由浏览器运行的包中:

// webpack.config.js

'use strict';

const webpack = require('webpack');
const path = require('path');

module.exports = {
  context: path.resolve(__dirname, 'src'),
  entry: './app.ts',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'app-bundle.js'
  },
  devtool: 'source-map',
  resolve: {
    extensions: ['', '.ts', '.js']
  },
  module: {
    loaders: [
      {test: /\.ts$/, loader: 'ts-loader'}
    ]
  }
};
Run Code Online (Sandbox Code Playgroud)

工作版

my_amd_module.js长相如下,一切工作正常.请注意,我将引用'module'作为依赖项并将函数绑定foo到它的exports属性,这是使用AMD的一种可能的风格.

// my_amd_module.js

define(['module'], function(module) {
  function foo () {
    return 'Hello from AMD!';
  }

  module.exports = foo;
});
Run Code Online (Sandbox Code Playgroud)

不工作的版本

但是当我使用替代语法来定义具有返回值的AMD模块而不是分配给它时 exports

// my_amd_module.js

define(function() {
  function foo () {
    return 'Hello from AMD!';
  }

  return foo;
});
Run Code Online (Sandbox Code Playgroud)

然后TypeScript编译器抱怨以下消息:

ERROR in ./app.ts
(1,27): error TS2306: File '/[...]/src/my_amd_module.js' is not a module.
Run Code Online (Sandbox Code Playgroud)

但该app-bundle.js文件仍然生成,一切都在浏览器中工作.

我在这种情况下使用的替代语法例如由RequireJSAMD规范本身描述.

我的问题

AMD模块是否使用return值定义其导出值而不是分配给exportsTypeScript不支持?这是编译器抱怨的原因吗?尽管有这样的抱怨,为什么一切都会被编译?

bas*_*rat 0

AMD 模块是否使用返回值定义其导出值,而不是分配给 TypeScript 不支持的导出

是的。显然,它没有被检测为外部模块,并推断为外部模块global,因此不允许使用require。请在这里提出问题: https: //github.com/Microsoft/TypeScript/issues