【问题标题】:typescript generic type with equal operator means?具有相等运算符的打字稿泛型类型是什么意思?
【发布时间】:2019-11-12 14:08:57
【问题描述】:

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

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

export interface FormProps<Data extends DataType = DataType> { }

DataType = DataType 在这里是什么意思?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如果您不提供类型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>;
    

    泛型参数默认遵循以下规则:

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

    【讨论】:

    • 谢谢@jcalz。我在 TS 网站上找不到文档,这很奇怪。
    • 语言发展如此之快,以至于许多文档只能在“新功能”wiki 甚至 GitHub 拉取请求中可靠地找到。
    猜你喜欢
    • 2021-04-07
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多