Javascript Typescript不';运行时的t类型检查

Javascript Typescript不';运行时的t类型检查,javascript,typescript,Javascript,Typescript,我是一个打字脚本的初学者,在他们的操场上玩。我有以下代码: 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 Hell

我是一个打字脚本的初学者,在他们的操场上玩。我有以下代码:

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);
类队列{
私有数据=[];
push=(item:T)=>this.data.push(item);
pop=():T=>this.data.shift();
}
let button=document.createElement('button');
button.textContent=“打招呼”;
button.onclick=函数(){
设q=新队列();
q、 推(“阿斯达达”);
警报(q.pop(0));
}
document.body.appendChild(按钮);
如您所见,我创建了一个队列对象,只接受一个数字。然而,我能够传递字符串,并能够在浏览器上提醒它。我看到了编译后的JS版本,它没有对我的变量进行类型检查。typescript不应该避免这些错误吗?还是我错了


谢谢

事实上,TypeScript在运行时不会检查类型。请参阅。

事实上,TypeScript在运行时不会检查类型。请参阅。

类型脚本仍将输出常规javascript,因此如果其javascript有效,它将继续工作。它只会在你使用的编辑器中对你大喊大叫

如果您更喜欢typescript,则在出现错误时不应生成javascript,请使用Matt McCutchen在评论中建议的
--noEmitOnError

如果要在运行时检查类型,可以使用


请参阅答案以获得一个快速示例。

Typescript仍将输出常规javascript,因此如果其有效javascript,它将继续工作。它只会在你使用的编辑器中对你大喊大叫

如果您更喜欢typescript,则在出现错误时不应生成javascript,请使用Matt McCutchen在评论中建议的
--noEmitOnError

如果要在运行时检查类型,可以使用



请参阅答案以获得一个快速示例。

typescript仍将输出常规javascript,因此如果其有效javascript,它将继续工作。它只会在你正在使用的编辑器中对你大喊大叫。因此,基本上,它的类型检查好处仅用于开发?它仍然可以成功编译?这是正确的。typescript仍然会输出常规javascript,因此如果它的有效javascript,它将继续工作。它只会在你正在使用的编辑器中对你大喊大叫,所以基本上,它的类型检查功能只用于开发?它仍然可以成功编译?没错。没错。如果您不想在出现类型错误时生成JavaScript,可以使用
--noemitError
。当Typescript编译为纯JavaScript时,尽管您在编译时看到错误,但如果该逻辑在JavaScript中有效,它将工作。因为您要运行的是Javascript代码,而不是Typescript代码。不,如果有正确的构建设置,如果存在类型问题,它不应该让您编译。理想情况下,你会有linting,它会实时指出这些错误。好处并不是真正的“仅在开发中”,是的,键入功能只在您开发时起作用,并且在转换为Javascript时不会强制执行键入,但这意味着您开发的内容不太可能出现与键入相关的问题,因为它不允许您编写具有危险做法的代码,例如假设对象属性或变量的数据类型。是的,如果检测到任何TS错误,则该配置选项应阻止创建Javascript输出。Re是否使用NoeMitError:这取决于您的开发工作流。有时,您可能会发现编写尚未找到正确类型的代码、在运行时对其进行测试、然后输入类型直到错误消失非常有用。使用noEmitOnError,在您可以测试任何东西之前,您必须放入一组强制转换,然后您必须记住在代码审查期间将它们取出。重要的是不要将有错误的代码检查到主分支中。Correct。如果您不想在出现类型错误时生成JavaScript,可以使用
--noemitError
。当Typescript编译为纯JavaScript时,尽管您在编译时看到错误,但如果该逻辑在JavaScript中有效,它将工作。因为您要运行的是Javascript代码,而不是Typescript代码。不,如果有正确的构建设置,如果存在类型问题,它不应该让您编译。理想情况下,你会有linting,它会实时指出这些错误。好处并不是真正的“仅在开发中”,是的,键入功能只在您开发时起作用,并且在转换为Javascript时不会强制执行键入,但这意味着您开发的内容不太可能出现与键入相关的问题,因为它不允许您编写具有危险做法的代码,例如假设对象属性或变量的数据类型。是的,如果检测到任何TS错误,则该配置选项应阻止创建Javascript输出。Re是否使用NoeMitError:这取决于您的开发工作流。有时,您可能会发现编写尚未找到正确类型的代码、在运行时对其进行测试、然后输入类型直到错误消失非常有用。使用noEmitOnError,在您可以测试任何东西之前,您必须放入一组强制转换,然后您必须记住在代码审查期间将它们取出。重要的是不要将有错误的代码检查到主分支中。