将 null 定义为数据类型有啥用?
Posted
技术标签:
【中文标题】将 null 定义为数据类型有啥用?【英文标题】:What is the use of defining null as a data type?将 null 定义为数据类型有什么用? 【发布时间】:2019-02-25 12:09:56 【问题描述】:我们正在学习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 作为类型对那些没有任何价值的物品?
在 How to declare a type as nullable in TypeScript? 和 TypeScript: Define type that can be bool or null 中,讨论的是关于将 null 分配/返回给某个变量。
那么任何人都可以帮助我们清除 null 被用作数据类型的概念吗?
【问题讨论】:
【参考方案1】:在 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 有 unit types,它们是只有一个值的类型。你知道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
。
【讨论】:
哇,这真的很有趣,它完全不同的视图,let x: "dog" = "do";
给出了错误,并且只有在像let x: "dog" = "dog";
这样编写时才会编译。很酷,谢谢,它说我们还有很长的路要走:):)
有关单位类型(以及所有其他类型)的更多信息,我推荐this section of Anders Hejlsberg's talk at Build 2018,我认为它会对您有很大帮助。干杯。
@ArunSudhakaran 还有一个好处是有function favorite(pet:"cat"|"dog")
这样的东西,所以你只能输入"cat"
或"dog"
,但不能输入"fish"
。以上是关于将 null 定义为数据类型有啥用?的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 中 JSONB[] (JSONB ARRAY) 数据类型有啥用?