Typescript 类中的可选字段 class-Person{ 名称?:字符串 }

Typescript 类中的可选字段 class-Person{ 名称?:字符串 },typescript,Typescript,这里,name的签名相当于name:string | undefined,而不是null 我内心的某些东西反对类成员是未定义的概念,因为这是我学习JS的方式:未定义仅适用于框架,它表示缺少字段,而不是缺少值(由null表示) 更糟糕的是,启用了严格的空检查,因为null!==未定义,如果要清除某个字段,则必须执行此操作。name=未定义,或删除此.name,这两项操作都会给我敲响警钟 然后我看到人们这样做:name?:string | null。这解决了将字段置零的尴尬,但是现在,没有真正的原因

这里,name的签名相当于
name:string | undefined
,而不是null

我内心的某些东西反对类成员是未定义的概念,因为这是我学习JS的方式:未定义仅适用于框架,它表示缺少字段,而不是缺少值(由null表示)

更糟糕的是,启用了严格的空检查,因为null!==未定义,如果要清除某个字段,则必须执行此操作。name=未定义,或删除此.name,这两项操作都会给我敲响警钟

然后我看到人们这样做:
name?:string | null
。这解决了将字段置零的尴尬,但是现在,没有真正的原因,您有了“string | undefined | null”

似乎只做“string | null”更为正确,它解决了大多数问题

TS团队似乎在内部决定只使用未定义的,尽管他们很清楚他们的决定对社区来说不是规定性的(毕竟,为什么要在语言中添加null?)

很长一段时间以来,在代码中明确使用
未定义的
被认为是危险的,因为它是一个值,而不是一个关键字,并且可以在不同的实现中以不同的方式实现(或可变的)。出于这个原因,如果(x===未定义)
,那么进行
检查也是一种禁忌,有利于
类型的检查这不再是真的吗?


将类成员定义为可选成员是否合法?TypeScript选择使用
未定义的
。当然,这并不意味着不能使用
null
。但是没有一条明确的界限来决定何时使用哪一种

其代码库的TypeScript指南行建议始终使用
未定义的
而不是
null

您试图实现的目标是:

class Person { 
  name: string | null = null;
}
关于Null vs Undefined的文章非常好,位于:

对我来说似乎是一个意见问题。。。您可以选择
name?:string
(请不要选择
string
)或
name:string | null=null
(请将其初始化为
null
,因为它本身不会发生);两者都不一定是好的还是坏的<代码>x==未定义
通常是安全的;如果您担心,可以使用
x==void 0
。不过,不确定任何答案如何具有权威性或规范性。有一些令人信服的论据可以使用
未定义的
。Crockford风格的ftw!这是一个意见问题,因为任何语言不固执己见的东西都是一个意见问题。然而,我相信你会同意,每种语言都允许你做一些反模式的事情,或者是淫秽的事情。我试图确定是否是这种情况
name:string | null
没有正确初始化属性(应该在
--strict
模式下警告您)。相反,
name:string | null=null
应该可以工作。确定。各有所长。我知道这些选择。我想知道这是否是可选操作符的错误用法