TypeScript版本: 2.2.1
代码
async function example() {
// result.value will be promise
const promise = Promise.resolve("foo");
await promise;
// result.value will be "foo"
return "foo";
}
预期行为:
忽略 __awaiter
和 __generator
,输出应包括 // result.value will be promise
实际行为:
function example() {
return __awaiter(this, void 0, void 0, function () {
var promise;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
promise = Promise.resolve("foo");
return [4 /*yield*/, promise];
case 1:
_a.sent();
// result.value will be "foo"
return [2 /*return*/, "foo"];
}
});
});
}
6条答案
按热度按时间8e2ybdfx1#
经过进一步探索,发现这种情况只发生在变量声明列表前出现注解时。
...变成:
js81xvg62#
与@rbuckton讨论后发现这个问题比看起来要难...我们需要解决以下几个问题
xqkwcwgp3#
当有两个独立的变量声明注解时,应该在哪里放置注解?
按照目前的方式将变量声明通过注解分开似乎是合理的。
默认输出:
使用
--removeComments
输出:gwbalxhn4#
@JoshuaKGoldberg,我认为这里的示例不够清晰。请考虑以下情况:
变为:
由于转换,
a
的声明已与其初始化器分离,而b
的声明已被提升,不再与源位置的相关代码关联。对于
a
,我们可以选择提升的声明或初始化器作为放置注解的位置。对于b
,我们可以选择提升的声明或为该位置合成一个NotEmittedStatement
,以便我们可以关联其注解。开发者可以选择任何一种选择,所以情况并不是那么明确。如果我们确实选择将注解与声明关联,那么在生成器转换中模拟您的建议中的注解发射将需要一些非平凡的更改。
s1ag04yj5#
在我看来,变量声明之前的注解应该始终紧跟在声明变量的地方:
语义上:
实际上:
有时我们确实需要在调试器中打开编译后的JS文件。假设这个需求是合理的:
@rbuckton 使用您的示例并应用保留注解的原则:
如果用
/** ... */
风格的注解编写,Intellisense仍然有效:@yuit 我不同意“按预期工作”的标签。如果这比值得的努力还要多,那么这是可以理解的,但我认为现在可以删除注解的方式不是很好。
ndasle7k6#
我同意
work as intended
不是一个好选择。我会重新打开并看看我们能做什么。