繁体   English   中英

为什么不允许分配null?

[英]Lint why not allow null to be assigned?

我正在遵循这个习惯,但是我选择不禁用TSLint默认设置。 但是也许我应该拥有,因为现在当我尝试为任何类型分配null时,它会给我一条错误消息:

function f()
{
    const a :string = null; //Type 'null' is not assignable to type 'string'
    return a;
}

f();

一个数字是一样的。 我的问题是,为什么TSLint选择完全禁用此类构造。 另外,如果我改为分配一个空字符串,也可以这样:

    const a :string = "";

这不是TSLint错误-它是由您启用strictNullChecks设置的tsconfig.json文件导致的。 对于所有未明确声明它们可以为null的类型,这使null成为无效值。

这是行为如何不同的示例( 操场链接 ):

let a: string = null;         // This fails with strictNullChecks
let b: string | null = null;  // This does not

这意味着,如果禁用了该设置,则实际上每个Type都将被视为“ Type | null | undefined Type | null | undefined 引擎盖下Type | null | undefined

那么,为什么要打开这样的功能呢? 乍一看似乎很不方便,但好处是它允许您在编译时而不是运行时捕获空指针错误。

考虑以下功能( 操场链接 ):

function parseCSV(input: string): string[] {
    return input.split(","); // If input is null, this will error!
}

禁用strictNullChecks ,您可以调用parseCSV(null) ,直到您真正运行代码,您才会收到错误消息。 启用它后,传入null会导致编译错误!

在理想的世界中(至少在我看来!),这是默认设置,但是由于太多现有的JavaScript代码会乱扔空值/未定义,因此不顾一切地放弃了,因此出于兼容性考虑,决定选择该设置。 如果出于某种原因您对这种行为不满意,则可以将该设置更改为false或将其从配置文件中删除以恢复为默认设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM