Typescript 类型脚本:赋值表达式中类型注释后的问号(可为空类型?)

Typescript 类型脚本:赋值表达式中类型注释后的问号(可为空类型?),typescript,Typescript,今天我发现我可以做到: let foo:string?//foo现在的类型为string | null 那是什么?我在TS手册中找不到它的参考资料。有人能指一下吗 另一个(同样重要的)问题是:为什么它会生成string | null而不是string | undefined?因为后者更有用,因为声明(但未初始化)变量的类型通常为未定义。考虑到登录界面给我们提供的问题,,这就更令人困惑了未定义的类型 另外,我的TS版本是3.4.3 UPD。这好像是一只虫子。仅当后跟if语句时有效: 让foo:s

今天我发现我可以做到:

let foo:string?//foo现在的类型为string | null
那是什么?我在TS手册中找不到它的参考资料。有人能指一下吗

另一个(同样重要的)问题是:为什么它会生成
string | null
而不是
string | undefined
?因为后者更有用,因为声明(但未初始化)变量的类型通常为
未定义
。考虑到登录界面给我们提供的问题,
,这就更令人困惑了未定义的
类型

另外,我的TS版本是3.4.3

UPD。这好像是一只虫子。仅当后跟if语句时有效:

让foo:string?
如果(1){
}

然后,再一次,好吧,这是一个bug,但是为什么它会产生
string | null

结果是它正在实现,并且需要
之后执行code>?
以在所有情况下正常工作

看起来这是为了支持某种版本的可空类型(即,
|null
)表示法。如果您开始在TypeScript文件中使用JSDoc语法,我希望看到一个错误。。。这就是我在书中看到的:

如果你在一个Type脚本文件中使用这个符号而没有看到一个错误,我会认为这是一个bug(或者你可能有一些有趣的编译器选项集)。


我之所以说“某个版本”,是因为将类型注释为可空的方法是将
用作前缀运算符,而不是后缀运算符。也就是说,JSDoc说使用
@type{string}
而不是
@type{string}

显然,谷歌是非官方的,我猜。但这不符合官方的JSDoc标准,甚至可能最终导致失败。因此,即使在代码中使用JSDoc类型的注释,我也不会依赖它


好的,希望能有帮助。祝你好运

你确定吗?我得到一个错误
“string”仅指一个类型,但在这里被用作一个值。
也许你在某个地方有
string
的定义@TitianCernicova Dragomir Titian嗨!很抱歉,我有一个打字错误(
=
而不是
),我很快就把它修好了……但仍然出现了一个错误@TitianCernicova Dragomir我猜这是一个TS 3.4.之类的东西。在3.4上工作。3@TitianCernicova-Dragomir嗯。我错了,我认为这是一个bug,只有在问号后面有一个if语句时才有效。我在我的github中收到了一个(非官方)响应,这似乎是一个非常古老的功能,据我所知,这是一个已实现但尚未记录的nullable类型的功能。他们选择了
string | null
而不是
string | undefined
string?
类型生成。此外,问号后面几乎总是需要分号(可能是为了避免干扰条件类型语法),可能会有这样的功能请求,但这种行为不是针对TS文件实现的,而是针对TS使用JSDoc检查的JS文件实现的。在代码中使用此语法时,是否没有收到与“JSDoc”相关的错误消息?这个特性的实现者谈到了这个问题。我很乐意删除这个答案,如果你能证明它是不正确的,但我很确定它是正确的。我讨厌这个!当我问这个问题时,我没有你提到的JSDoc消息,现在我有了!我想当时我的编译器由于某种原因未能生成该消息。。可能是因为我通常用最奇怪的类型折磨编译器,并将编辑会话保留数天,所以它出现了bug。。你的回答现在看来是对的。。
let foo: string?; // error!
// JSDoc types can only be used inside documentation comments.