每次我输入一个无法定义的变量,我都觉得我输入错了:
let a: string | undefined;
为什么我觉得我输入错了?这是因为除了在变量声明中,我从未将 undefined
类型添加到联合类型中。
你不觉得是时候将可选操作符也引入到局部变量声明中了吗?
let a?: string;
对我来说,上述语法感觉非常自然和符合TypeScript的惯用法。
每次我输入一个无法定义的变量,我都觉得我输入错了:
let a: string | undefined;
为什么我觉得我输入错了?这是因为除了在变量声明中,我从未将 undefined
类型添加到联合类型中。
你不觉得是时候将可选操作符也引入到局部变量声明中了吗?
let a?: string;
对我来说,上述语法感觉非常自然和符合TypeScript的惯用法。
9条答案
按热度按时间kx5bkwkv1#
或者启用严格空值检查的可空局部变量。
sc4hvdpw2#
或者启用严格空值检查的可空局部变量。
?
永远不包含null
。?
表示参数和属性的“可选”,意味着T | undefined
。igetnqfo3#
这绝对是必要的。在处理许多可选参数/成员的代码中,来回切换?和类型|未定义是非常痛苦的,因为在实际情况下,这两种情况下你都在处理完全相同的对象(只是有时候作为参数/成员,而其他时候作为局部变量)。
我怀疑人们没有在这个方面下大力气,因为严格空值检查的使用并不像它应该的那样普遍。
C#是一个很好的例子,其中可空的?修饰符同样适用于参数、局部变量和成员。
nhaq1z214#
每次我输入一个无法定义的变量,我都觉得我输入错了:
为什么我觉得我输入错了?因为我从未将
undefined
类型添加到联合类型中,除了在变量声明中。你不觉得是时候将可选操作符也引入到局部变量声明中了吗?
对我来说,上面的语法感觉非常自然和符合TypeScript的惯例。
我只是尝试使用
let s? : string = null;
并失败了。lol猜到它完成之前
let s: string | null;
已经足够了。但是请为let s? : string = null;
投票。祝好。
u5rb5r595#
我完全同意。请,请,给我们更简洁的语法来表示
T | null
!0md85ypi6#
虽然这是一个老问题,但我想在这里留下一个备注,以防其他人找到这个。许多库使用泛型使可选语法更美观。例如,将Maybe定义为
type Maybe<T> = T | null;
,然后让你做类似的事情,如
let foo: Maybe<string> = null;
。这并不是真的节省字符,但我认为它读起来更好。也可以做类似的事情type Nullish<T> = T | null | undefined;
和
type Opt<T> = T | undefined;
js81xvg67#
这个去哪里了?
p4tfgftt8#
我认为我们不太可能实现这个。从语义上讲,这与类型作为注解提案的定义语法相悖,而且非常令人困惑——变量绝对在那里,只是可能没有初始化,而一个可选的属性可能确实完全缺失。
n53p2ov09#
考虑采用更符合函数式编程风格的方法,以减少在定义值之前声明大量变量的需求。尽可能追求不可变性。