我正在学习通用的打字稿,并使用扩展类型的等号运算符遇到以下通用类型
export interface DataType {
[key: string]: FieldValue;
}
export interface FormProps<Data extends DataType = DataType> { }
DataType = DataType
在这里是什么意思?
答案 0 :(得分:4)
如果您不提供类型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[]>;
使用通用参数默认值,我们可以将其减少为:
declare function create<T extends HTMLElement = HTMLDivElement, U = T[]>(element?: T, children?: U): Container<T, U>;
通用参数默认设置遵循以下规则:
- 如果类型参数具有默认值,则认为它是可选的。
- 必需的类型参数不能跟随可选的类型参数。
- 类型参数的默认类型必须满足该类型参数的约束(如果存在)。
- 指定类型参数时,仅需要为所需的类型参数指定类型参数。未指定的类型参数将解析为其默认类型。
- 如果指定了默认类型,并且推理无法选择候选者,则将推断默认类型。
- 与现有类或接口声明合并的类或接口声明可能会为现有类型参数引入默认值。
- 与现有类或接口声明合并的类或接口声明可以引入新的类型参数,只要它指定默认值即可。