[英]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.