Typescript编译器即使在编译错误后也会生成javascript

Typescript编译器即使在编译错误后也会生成javascript,javascript,typescript,Javascript,Typescript,我刚开始打字,尝试了一些基本的东西。所以我编译了下面的app1.tscode class Monster { constructor(name, initialPosition) { this.name = name; this.initialPosition = initialPosition; } } 我相信我们可以像在JS中一样,动态地向类Monster添加任何属性。所以this.name和this.initialPosition应该是一

我刚开始打字,尝试了一些基本的东西。所以我编译了下面的
app1.ts
code

class Monster {
    constructor(name, initialPosition) {
        this.name = name;
        this.initialPosition = initialPosition; 
    }
}
我相信我们可以像在JS中一样,动态地向类
Monster
添加任何属性。所以
this.name
this.initialPosition
应该是一种有效的方法。但一旦我编译代码,它就会抛出下面的错误

app1.ts(3,14):错误TS2339:类型上不存在属性“name” “怪物”

app1.ts(4,14):错误TS2339:属性“initialPosition”不存在 关于“怪物”类型

此时,我认为我们可能无法动态添加属性(好吧,我知道我们不能像ECMA6那样添加属性,我们必须定义属性-这很好),但当我检查生成的JS时,我真的很惊讶。编译错误后,它生成下面的JS代码

var Monster = /** @class */ (function () {
    function Monster(name, initialPosition) {
        this.name = name;
        this.initialPosition = initialPosition;
    }
    return Monster;
}());

我有点困惑。为什么编译错误后会生成JS?到底发生了什么

有些类型的错误与允许编译器发出JS的类型检查有关。仅仅因为typescript编译器不能证明程序是类型安全的,并不意味着它不会运行。如果代码可以运行,它将被输出到JS(因此类型错误允许emit,但语法错误不允许)


有一个编译器选项控制此
--noemitorror
。您可以阅读更多

。。。谁说不行?(不同的SE站点,但无论如何值得一读)@user202729好的,如果是,为什么会这样?