Typescript Lint为什么不允许分配null?

Typescript Lint为什么不允许分配null?,typescript,tslint,Typescript,Tslint,我遵循这一点,但我选择不禁用TSLint默认设置。但是,也许我应该这样做,因为现在当我尝试为任何类型分配null时,它会给我一条错误消息: function f() { const a :string = null; //Type 'null' is not assignable to type 'string' return a; } f(); 一个数字也一样。我的问题是为什么TSLint选择完全禁用这种构造。另外,如果我改为指定一个空字符串,可以吗 const a

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

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

f();
一个数字也一样。我的问题是为什么TSLint选择完全禁用这种构造。另外,如果我改为指定一个空字符串,可以吗

    const a :string = "";

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

以下是行为差异的示例:

这意味着,如果禁用了该设置,则实际上每个类型都会被视为引擎盖下的类型| null |未定义

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

考虑以下功能:

禁用strictNullChecks后,可以调用parseCSVnull,在实际运行代码之前不会出现错误。启用时,传入null将导致编译错误


在一个理想的世界里,至少在我看来是这样!,这将是默认设置,但由于太多现有JavaScript代码不顾后果地抛出null/undefined,因此出于兼容性考虑,决定将该设置设置为opt-in。如果出于任何原因,这种行为不适合你,然后,您可以将该设置更改为false,或从配置文件中将其删除,以恢复为默认设置。

如果您对我为什么需要该设置有更多的解释,我们将不胜感激,因为我是这个类型脚本的新手。@anarrayofffunctions:对我的答案进行了一点扩展。@anarrayofffunctions:刚刚添加了一个更实际的示例,说明您为什么需要该设置启用该设置-希望它有助于:
let a: string = null;         // This fails with strictNullChecks
let b: string | null = null;  // This does not
function parseCSV(input: string): string[] {
    return input.split(","); // If input is null, this will error!
}