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
文件仍然生成,一切都在浏览器中工作.
我在这种情况下使用的替代语法例如由RequireJS或AMD规范本身描述.
AMD模块是否使用return
值定义其导出值而不是分配给exports
TypeScript不支持?这是编译器抱怨的原因吗?尽管有这样的抱怨,为什么一切都会被编译?
AMD 模块是否使用返回值定义其导出值,而不是分配给 TypeScript 不支持的导出
是的。显然,它没有被检测为外部模块,并推断为外部模块global
,因此不允许使用require
。请在这里提出问题: https: //github.com/Microsoft/TypeScript/issues
归档时间: |
|
查看次数: |
623 次 |
最近记录: |