为什么不允许分配空值?



我正在遵循这个问题,但我选择不禁用 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 的所有类型都是无效值。

下面是行为差异的示例(游乐场链接(:

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

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

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

考虑以下函数(游乐场链接(:

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

禁用strictNullChecks后,可以调用parseCSV(null),并且在实际运行代码之前不会收到错误。启用它后,传入 null 将导致编译错误!

在一个理想的世界里(至少在我看来!(,这将是默认设置,但是由于如此多的现有JavaScript代码不计后果地抛弃了nulls/undefined,因此决定为了兼容性而选择该设置。如果出于任何原因不希望此行为,则可以将该设置更改为false或将其从配置文件中删除以恢复为默认值。

相关内容

  • 没有找到相关文章

最新更新