Rem*_*.co 2 typescript ecmascript-6
我是 TypeScript 的新手,正在尝试将当前的 JavaScript 转换为 TypeScript。
在 JS 中我有这样的结构:
var roles = {
x: require('role.x'),
y: require('role.y')
};
Run Code Online (Sandbox Code Playgroud)
目的是稍后迭代这些角色,如下所示:
for (var index in roles) {
var role = new roles[index];
if (someObject.role == role.role) {
role.run(someObject);
}
}
Run Code Online (Sandbox Code Playgroud)
然而在 TypeScript 中,我似乎无法做到这一点:
let roles = {
x: import X from "./roles/x"
}
Run Code Online (Sandbox Code Playgroud)
哪个产量
Error:(11, 14) TS1109: Expression expected.
Error:(11, 21) TS1005: ':' expected.
Error:(11, 31) TS1005: ',' expected.
Error:(11, 36) TS1005: ':' expected.
Run Code Online (Sandbox Code Playgroud)
那么,TypeScript 相当于实现相同的方法或者更干净/TypeScript 方式的替代方法吗?
为了完整起见,现在(自 2017 年以来),另一种方法是使用动态导入语句。
V8 规格提供了更多相关信息。
该import()
声明返回一个承诺。
所以,理论上,这应该可行(并且看起来更类似于 JSrequire
代码):
let roles = {
x: await import('./roles/x'),
y: await import('./roles/y')
};
Run Code Online (Sandbox Code Playgroud)
如果您想从导入的文件中分配特定的函数/实体,您应该能够这样做:
let roles = {
x: await (async () => {let {X} = await import('./roles/x'); return X;})()
y: await (async () => {let {Y} = await import('./roles/x'); return Y;})()
};
Run Code Online (Sandbox Code Playgroud)
如果有人喜欢使用相反的.then()
方式(为了并发),那么这个StackOverflow 答案显示了将 await 替换为.then()
将返回的 Promise 分配给对象键。
我希望这有帮助。
归档时间: |
|
查看次数: |
8287 次 |
最近记录: |