我是一名打字稿初学者,并在其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版本,它没有类型检查我的变量。打字稿不应该避免这些错误吗?还是我弄错了?
谢谢!
答案 0 :(得分:3)
实际上,TypeScript在运行时不检查类型。参见FAQ entry。
答案 1 :(得分:3)
Typescript仍将输出常规javascript,因此,如果其有效的javascript,它将继续运行。只会在您使用的编辑器中大吼大叫。
如果您喜欢打字稿,如果出现错误,则不应生成javascript,如评论中的Matt McCutchen所述,使用--noEmitOnError
。
如果要在运行时检查类型,可以使用User-Defined Type Guards。
有关快速示例,请参见this答案。