【问题标题】:TypeScript type declarationTypeScript 类型声明
【发布时间】:2021-02-15 19:11:24
【问题描述】:

有人可以向我解释一下这个声明在 TypeScript 中的确切含义吗?我知道使用 typeinterface 我可以创建新的数据类型。但我实在看不懂这种说法。

 type ParameterizedContext<StateT = DefaultState, CustomT = DefaultContext> = ExtendableContext & {
        state: StateT;
    } & CustomT; 

我在https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/koa/index.d.ts找到了这个

谢谢,

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:
    ParameterizedContext<StateT = DefaultState, CustomT = DefaultContext>
    

    这是定义泛型类型的开始。 StateTCustomT 是占位符,您可以填写任何您喜欢的类型,但如果您不填写它们将使用 DefaultStateDefaultContext

    例如,如果您创建一个ParameterizedContext&lt;{ foo: string }, { bar: number }&gt;,则StateT 在类型中的任何位置都变为{ foo: string }CustomT 变为{ bar: number }

    ExtendableContext & {
      state: StateT;
    } & CustomT; 
    

    这意味着它具有 ExtendableContext 的所有属性,加上一个类型为StateT 的状态属性,以及CustomT 的所有属性。

    所以继续上面的例子,如果StateT{ foo: string } 并且CustomT{ bar: number },那么这个类型如下

    {
      // ... imagine all the properties of ExtendableContext being here (i don't know what they are)
      state: { foo: string },
      bar: number,
    }
    

    【讨论】:

    • 尼古拉斯先生的精彩解释,谢谢!
    【解决方案2】:

    &amp; 运算符允许创建intersection-typesA &amp; B 是一个 A 和 B 的类型,具有 A 的所有属性和 B 的所有属性。

    在您的类型中,ParameterizedContext 是一个 ExtendableContext 加上一个名为 state 的类型为 StateT 的属性以及 CustomT 的所有属性

    StateTCustomTgenerics。泛型允许通过添加参数来重用类型定义。

    StateT 默认为DefaultState,定义为anyCustomT 默认为 DefaultContext,由 Record&lt;string, any&gt; 定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2021-02-27
      • 2016-03-12
      • 2020-08-06
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多