const a: string = "abc";
const b: string[] = ["def", "ghi"];
const c = a + b
在string []中产生abcdef,ghi
个逗号分隔的项目字符串。如何让打字稿首先知道这是不允许的?
答案 0 :(得分:1)
c = a + b
实际上是{} + \[\]
{} + []
这里的{}不会被解析为对象,而是被解析为一个空块(第12.1节,至少只要您不强制将该语句成为表达式即可,但稍后再介绍)。空块的返回值为空,因此该语句的结果与+ []相同。一元+运算符(第11.4.6节)返回ToNumber(ToPrimitive(operand))。众所周知,ToPrimitive([])是空字符串,根据§9.3.1,ToNumber(“”)为0。
a是位于{}
边的字符串,而b(string[]
)是[]
。当您将字符串对象与字符串数组求和时,javascript会将字符串数组隐式转换为级联字符串(这是预期的行为)
因此,这里的javascript没有任何非法行为。