使用“as”强制转换时没有分号的TypeScript语法错误

时间:2018-01-02 15:10:46

标签: typescript

我更喜欢没有分号的编码风格。以下代码段给出了一个错误:

let x = 123
(window as any).test = 'hello'

错误是:

Cannot invoke an expression whose type lacks a call signature. Type 'Number' has no compatible call signatures.

如果我在第一行的末尾添加分号,则会编译而没有错误。

我认为换行符应足以让TS分别解析这些语句。也许我不知道什么,也许这是一个错误?我想知道解释。

编辑:在提供的链接中接受的答案中,声明ASI在var声明的情况下发生。这让我觉得同样适用于letconst

因此,我们有一个var语句和一个LineTerminator,根据这个TS应该将这两行解析为两个语句,而不是一个。我哪里错了?

1 个答案:

答案 0 :(得分:1)

来自ECMAScript规范的引用,我的重点是:

  

当程序从左到右解析时,遇到令牌(称为违规令牌),任何语法产生都不允许,然后会自动插入分号如果满足以下一个或多个条件,则违规令牌......

123之后跟一组括号的表达式允许生成语法 - 这是一个函数调用!

解析器看到123(并认为您正在尝试将123作为函数调用,因此会抛出错误。您收到的消息暗示了这一点 - 它说Number没有为您调用它时的类型定义。