TypeScript 中的破折号问号语法是什么?

Ahm*_*sih 7 syntax optional typescript

我的意思不是问号语法,而是我问-?的,例如:

type Required<T> =
  T extends object
    ? { [P in keyof T]-?: NonNullable<T[P]>; } // <---------- "-?" here
    : T;
Run Code Online (Sandbox Code Playgroud)

通过2018 年 GitHub 评论。我在 TypeScript 手册关于高级类型实用程序类型的章节中找不到这种语法。

-?如上所述仍然在 TypeScript 3.8 中编译,并且似乎是相反?,即,使密钥成为必需的?它相当于Required? 如果不是,这个语法叫什么,我在哪里可以阅读更多关于它的信息?

jca*_*alz 12

您基本上是对的:它?映射类型中删除了可选的属性修饰符。它是在 TypeScript 2.8 中引入的,作为控制映射类型修饰符改进的一部分(请参阅此链接以获取所需的文档)。这不是等同Required实用型,但Required用它来实现(见这里库定义),并没有它不可能存在。

令人遗憾的是,TypeScript 文档分散在手册、发行说明、常见问题解答、过时的规范和 GitHub 问题之间,没有一个明确的规范位置来查找任何特定内容。该语言的发展速度比文档还快。

好的,希望有帮助;祝你好运!