TypeScript - null与undefined

时间:2018-04-10 06:28:00

标签: typescript

TypeScript Coding Guidelines

  

使用 undefined 。不要使用null

刚刚阅读了另一个article on ECMAScript,其中提倡null而不是undefined,我想知道微软或TypeScript团队的理由是否为此决定所知?

3 个答案:

答案 0 :(得分:10)

指南无需基本原理,可以随意选择要求,以保持代码库的一致性。

对于此准则,undefined需要输入更多字符,但不需要明确分配给可空变量或属性:

class Foo {
  bar: number|undefined;
}

function foo(bar: number|undefined) {}

VS

class Foo {
  bar: number|null = null;
}

function foo(bar: number|null = null) {}

此外,在运行时检查null值的类型不太方便,因为typeof val === 'object'null对象typeof val === 'undefined'undefined onDestroy public function redirectPath() { if (method_exists($this, 'redirectTo')) { return $this->redirectTo(); } return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; } 1}} public function redirectTo(){ return '/dynamic_url'; }

有一个相关的TSLint规则解决了这个问题,no-null-keyword

答案 1 :(得分:4)

几个月前我做了一些研究,我得出的结论是undefined必须优先使用tslint规则'no-null-keyword'。

我试图改变我的代码库,但我遇到了一些问题。 为什么? 因为我使用的API为空字段返回null。

由于tslint三等于规则,我很挣扎。

if (returnedData === undefined) // will be false because returnedData is null

让你有两个选择:

1)在三等分规则中添加一些参数。

“triple-equals”:[true,“allow-null-check”]并执行If (returnedData == null)

allow-null-check允许“==”表示null

2)改为使用If (returnedData),但会检查是否为null / undefined /空字符串或零

答案 2 :(得分:1)

为什么在undefined上使用null?

在javascripts中,对象是动态的,没有任何类型信息。为此:

var person
person.namme

可能是拼写错误,也可能是name属性。如果你使用undefined as null,那你在调试时不会知道:

  • 变量/属性尚未初始化,或
  • 您错过了输入的属性名称。

因此,null优于undefined,您可以推迟:

  • 忘记初始化属性和
  • 使用了错误的财产。

那说:打字稿是打字的。因此以下代码:

var person
person.namme

会在编译时导致类型错误。因此,不再需要这种意义上的null。

那就是说,我仍然喜欢null而不是undefined。