我正在遵循这个问题,但我选择不禁用 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
或将其从配置文件中删除以恢复为默认值。