具有相等运算符的打字稿泛型类型意味着什么?

Bru*_*uce 4 typescript

我正在学习泛型打字稿,并遇到以下带有扩展类型的等号运算符的泛型

export interface DataType {
  [key: string]: FieldValue;
}

export interface FormProps<Data extends DataType = DataType> { }
Run Code Online (Sandbox Code Playgroud)

DataType = DataType这里是什么意思?

jhp*_*ING 8

如果您不提供类型Data必须扩展DataType),则默认为DataType

从以前的发行说明

考虑一个创建新HTMLElement的函数,不带任何参数的调用将生成一个Div;您也可以选择传递孩子列表。以前,您必须将其定义为:

declare function create(): Container<HTMLDivElement, HTMLDivElement[]>;
declare function create<T extends HTMLElement>(element: T): Container<T, T[]>;
declare function create<T extends HTMLElement, U extends HTMLElement>(element: > T, children: U[]): Container<T, U[]>;
Run Code Online (Sandbox Code Playgroud)

使用通用参数默认值,我们可以将其减少为:

declare function create<T extends HTMLElement = HTMLDivElement, U = T[]>(element?: T, children?: U): Container<T, U>;
Run Code Online (Sandbox Code Playgroud)

通用参数默认遵循以下规则:

  • 如果类型参数具有默认值,则认为它是可选的。
  • 必需的类型参数不能跟随可选的类型参数。
  • 类型参数的默认类型必须满足该类型参数的约束(如果存在)。
  • 指定类型参数时,仅需要为所需的类型参数指定类型参数。未指定的类型参数将解析为其默认类型。
  • 如果指定了默认类型,并且推理无法选择候选项,则将推断默认类型。
  • 与现有类或接口声明合并的类或接口声明可能会为现有类型参数引入默认值。
  • 与现有类或接口声明合并的类或接口声明可以引入新的类型参数,只要它指定默认值即可。

  • 该语言发展得如此之快,以至于很多文档只能在“新增内容”wiki 甚至 GitHub 拉取请求中可靠地找到。 (7认同)
  • [相关文档](https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#generic-parameter-defaults) (2认同)
  • 谢谢@jcalz。我在 TS 网站上找不到文档,这很奇怪。 (2认同)