如何停止与打字稿中的字符串数组串联的字符串

时间:2019-01-18 11:50:39

标签: arrays typescript

const a: string = "abc";
const b: string[] = ["def", "ghi"];
const c = a + b

在string []中产生abcdef,ghi个逗号分隔的项目字符串。如何让打字稿首先知道这是不允许的?

1 个答案:

答案 0 :(得分:1)

c = a + b实际上是{} + \[\]

  

{} + []

     

这里的{}不会被解析为对象,而是被解析为一个空块(第12.1节,至少只要您不强制将该语句成为表达式即可,但稍后再介绍)。空块的返回值为空,因此该语句的结果与+ []相同。一元+运算符(第11.4.6节)返回ToNumber(ToPrimitive(operand))。众所周知,ToPrimitive([])是空字符串,根据§9.3.1,ToNumber(“”)为0。

a是位于{}边的字符串,而b(string[])是[]。当您将字符串对象与字符串数组求和时,javascript会将字符串数组隐式转换为级联字符串(这是预期的行为)

因此,这里的javascript没有任何非法行为。