Typescript在运行时不进行类型检查

时间:2018-08-02 03:32:16

标签: javascript typescript

我是一名打字稿初学者,并在其Playground网站上使用它。我有以下代码:

class Queue<T> { 
    private data = [];

    push = (item: T) => this.data.push(item);
    pop = (): T => this.data.shift();
}



let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function () {
    let q = new Queue<number>();
    q.push("asdada");

    alert(q.pop(0));
}

document.body.appendChild(button);

如您所见,我创建了一个队列对象以仅接受数字。但是,我能够传递字符串并能够在浏览器中提醒它。我看到了已编译的JS版本,它没有类型检查我的变量。打字稿不应该避免这些错误吗?还是我弄错了?

谢谢!

2 个答案:

答案 0 :(得分:3)

实际上,TypeScript在运行时不检查类型。参见FAQ entry

答案 1 :(得分:3)

Typescript仍将输出常规javascript,因此,如果其有效的javascript,它将继续运行。只会在您使用的编辑器中大吼大叫。

如果您喜欢打字稿,如果出现错误,则不应生成javascript,如评论中的Matt McCutchen所述,使用--noEmitOnError

如果要在运行时检查类型,可以使用User-Defined Type Guards

有关快速示例,请参见this答案。