![](/img/trans.png)
[英]Equivalent of a “require” statement in ES6: *.plugin(require('*'))
[英]How to port an ES6 require() statement to typescript
我们已经能够将JS / ES6项目中的所有代码移植到Typescript 3.x,但是似乎无法正确移植以下文件。
文件的简短版本如下所示:
index.js(原始):
export const Log = require('./src/Log');
export const OidcClient = require('./src/OidcClient');
export default {
Log,
OidcClient
};
index.ts(已移植):
import Log from './src/Log';
import { OidcClient } from './src/OidcClient';
export default {
Log,
OidcClient
};
问题似乎出在import LOG from './src/Log'
与export const Log = require('./src/Log');
import LOG from './src/Log'
声明。 如果我们更改源文件以使用export LOG from './src/Log';
则在调用脚本文件中未定义Log
,就像我们在移植版本中看到的问题一样。
对于源文件, OidcClient
声明导出的OidcClient
语句定义为(property) OidcClient: typeof import("c:/.../src/OidcClient").
而OidcClient
语句的移植版本定义为(property) OidcClient: typeof OidcClient
。
我们如何从TypeScript文件进行这项工作?
为了完整性
我们正在使用webpack,并使用以下输出设置将输出构建为库:
libraryTarget: 'var', library:'Oidc'
因此,JS客户端应使用类似以下模块: Oidc.Log.Error(message)
。 但是问题出在Oidc.Log
是未定义的。
线索
在浏览器的调试器中,我们注意到Oidc
被定义为Module
,这是我们所期望的,但是它具有一个名为default
的神秘属性,该属性具有我们想要的所有内容。 好的,如何删除default
属性并应用其部分对象Oidc
模块中的所有内容?
经过4天的反复试验,我们找到了解决方案。
解
该文档以及我们可以找到的所有内容都表明我们应该使用:
export default { Log, OidcClient }
出于绝望,我们终于尝试删除default
关键字,如下所示:
export { Log, OidcClient }
你猜怎么着? 有效!!
不再有神秘的default
属性,所有类型都可以按预期在Oidc
模块中运行!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.