我们已经能够将JS / ES6项目的所有代码移植到打字稿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');
语句之间。如果我们将源文件更改为使用export LOG from './src/Log';
,则Log
在调用脚本文件中未定义,就像我们在移植版本中看到的问题一样。
对于源文件,Intellisense声明将导出的OidcClient
语句定义为
(property) OidcClient: typeof import("c:/.../src/OidcClient").
OidcClient
语句的移植版本定义为
(property) OidcClient: typeof OidcClient
。
我们如何通过TypeScript文件进行这项工作?
答案 0 :(得分:0)
为了完整性
我们正在使用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
模块!