Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript不';捕获未定义的变量?_Typescript - Fatal编程技术网

TypeScript不';捕获未定义的变量?

TypeScript不';捕获未定义的变量?,typescript,Typescript,我正在努力更好地理解打字稿。我发现如果我写这样一个bug: function doStuff() { if (physician.email == "george@gmail.com") { var physician = {email: "bob@gmail.com", name: "Dr. Bob"}; /* .... */ } } TypeScript不会发现在我们尝试使用其属性之一后定义了Medical对象的问题。这将导致以下

我正在努力更好地理解打字稿。我发现如果我写这样一个bug:

function doStuff() {
    if (physician.email == "george@gmail.com")
    {
         var physician = {email: "bob@gmail.com", name: "Dr. Bob"};
         /* .... */
    } }
TypeScript不会发现在我们尝试使用其属性之一后定义了Medical对象的问题。这将导致以下运行时错误:

类型错误:无法读取未定义的属性“email”


为什么TypeScript transpiler不能捕获这样的内容?我相信使用TypeScript 2.0。

在JavaScript中,
var
变量的声明(尽管不是初始化)被隐式移动到包含函数的开头,并且
var
变量被隐式初始化为
未定义的
,直到到达用户编写的初始值设定项为止。默认情况下,TypeScript的位置是读取隐式
未定义的值是合法的。使其成为错误的一种方法是启用
strictNullChecks
编译器选项(或伞形
strict
选项),并为变量指定一种不包含
未定义的
的类型(在您的示例中,通过推理自动发生)。以下是该功能的详细信息。tslint还有一个可以检测问题的方法


var
变量不同,在声明变量之前使用
let
const
变量在TypeScript中总是一个编译错误。这就是强烈建议
let
(或
const
)优于
var
的原因之一。声明变量之后(隐式初始化为
未定义的
),但在用户代码初始化变量之前,使用
let
变量遵循与
var

相同的规则。注意:这是避免使用
var
的一个原因。如果在声明变量之前不能使用它,那么很难意外地导致这样的错误。