为什么TypeScript允许1+';1';=';11';?什么';它背后的设计理念是什么?

为什么TypeScript允许1+';1';=';11';?什么';它背后的设计理念是什么?,typescript,type-coercion,Typescript,Type Coercion,如果想法是向系统添加类型,为什么它仍然允许JavaScript样式强制?(这里的新手试图理解设计思想。谢谢!)因为: Typescript是Javascript+type。所以,Javascript所能做的就是Typescript也能做到这一点 Typescript代码不能由web浏览器直接执行。它必须传输到Javascript。在透明过程中,所有类型信息都将被删除。这一点解释了上述情况 即使是强类型编程语言,如C#,也允许将number添加到string As C#允许将数字添加到字符串。因

如果想法是向系统添加类型,为什么它仍然允许JavaScript样式强制?(这里的新手试图理解设计思想。谢谢!)

因为:

  • Typescript是
    Javascript
    +
    type
    。所以,Javascript所能做的就是Typescript也能做到这一点
  • Typescript代码不能由web浏览器直接执行。它必须传输到Javascript。在透明过程中,所有类型信息都将被删除。这一点解释了上述情况
  • 即使是强类型编程语言,如C#,也允许将
    number
    添加到
    string
  • As C#允许将
    数字
    添加到
    字符串
    。因此,Typescript没有理由不允许这样做,因为它们都是由Microsoft创建的
  • 您可以将Typescript的类型系统视为帮助您创建更健壮代码的工具。例如,让我们看看下面的代码:

    let a: number = 1;  
    let b: string = '1';  
    
    a = false;  
    
    console.log(a + b);  
    
    你能猜出输出吗?
    哦,等等,代码甚至可以编译/传输吗

    输出为
    false1
    ,Typescript代码仍成功传输为Javascript代码。然而,transpiler会在你面前吐出一个错误,说:
    类型'false'不可分配给类型'number'
    。这就是为什么我说Typescript中的
    type
    是可选的。它只是为了帮助您的代码更加健壮


Typescript是javascript的超集,这意味着javascript具有的任何功能和行为Typescript也将具有。我喜欢您的第三个主题对所有这些讨论的总结:“即使是强类型编程语言,如C#,也允许在字符串中添加数字”。应该是这样,因为这不是JavaScript内聚。每种主要的高级语言都会将字符串与数字连接起来。我认为OP的意思是让大家注意到JavaScript(和TypeScript)处理字符串和数字的其他“奇怪的东西”,并错误地说了这些。谢谢!这真的很有帮助。我知道TS是JS的超集,但进一步思考,为什么它会对减法1-'1'而不是加法1+'1'发出类型错误,尽管JS在这两种情况下都允许强制?