我们正在学习TypeScript
,并在声明变量的同时尝试像这样指定其类型
let a: number = 5;
let b: boolean;
let c: string;
let d: any;
let e: number[] = [1, 2, 3, 4, 5];
let f: any[] = [true, 'foo', 4.09, []];
let g: null;
这些any
和null
对我们来说是陌生的,我们能够理解any
的概念,但是它与null
混淆了。这是我们第一次听说null
是data type
,我们已经听说null
是Java
中的一个值。真正令人困惑的是,为什么有人需要数据类型为null
。
在Java中,我们将变量声明为
int a = 0;
double b = 0.0;
char c = 'c';
String x = "abc";
但是如果null
是一种数据类型,它会喜欢这样
null a;
我们发现很难理解这个概念!如果将null分配给变量很酷,那么就什么都没有了,但是将null作为数据类型的目的是什么?所以我们看了一些网站
Data types in TypeScript-在这里说,当对象没有任何值时使用,但这表示如果对象没有值则将其分配为null或将null指定为那些没有任何价值的对象的类型?
在How to declare a type as nullable in TypeScript?和TypeScript: Define type that can be bool or null中,讨论的是关于将null分配/返回给某个变量。
那么有人能帮助我们清除null用作数据类型的概念吗?
答案 0 :(得分:3)
在JavaScript和TypeScript中,null
是一个非常好的值。没错,它或多或少地代表了虚无,但是拥有一个代表缺少某物的价值是很好的。考虑:
let supervisor = "None" // I have a supervisor named "None"
let supervisor = null // I DON'T HAVE a supervisor
let supervisor = undefined // Maybe I have a supervisor, maybe
// I don't, I don't know or care, or
// none of your business
现在,您询问了null
作为一种类型。大!值null
和类型null
之间容易混淆。但是,这是您可以理解的方式。 TypeScript具有单位类型,这些类型只有一个值。您知道5
是一种类型吗? (这是唯一值是数字5的类型。您知道"dog"
是一种类型吗?(唯一值是"dog"
的类型。是的,您可以说:
let x: "dog" = "dog";
let y: 5 = 5;
现在,由于null
是一个值,因此也存在一个称为null
的类型。它是唯一值为null
的类型。就像上面的两个一样,它是一个单元类型。
let z: null = null;
现在,如果您的问题是“为什么我会在真实的应用程序中声明这种类型?”这也是一个好问题。也许您可能没有明确地声明这样的类型,但是您很可能想要这样的类型:
number | null
这可能是将字符串转换为数字的函数的结果类型。注意联合类型T1 | T2
,其中T1和T2是类型。如果没有null
这样的类型,那么number | null
不会是两种类型的并集,事情将会很奇怪。当您拥有单位类型时,事情会变得更加干净!而且由于null
是一个值,所以需要有一个null
类型,仅包含值null
。