【问题标题】:How to interpret the declaration of the following function如何解释以下函数的声明
【发布时间】:2020-06-29 08:35:14
【问题描述】:
export declare abstract class AbstractBootstrapConsole<A extends INestApplicationContext, O extends CommonBootstrapConsoleOptions = CommonBootstrapConsoleOptions> {
    protected service: ConsoleService;
    protected container: A;
    protected readonly options: O;
    constructor(options: O);
    protected useDecorators(): this;
    init(): Promise<A>;
    getService(): ConsoleService;
    getOptions(): O;
    boot(argv?: string[]):     
    Promise<CommandResponse>;
    abstract create(): Promise<A>;
}

我试图理解这个 function 类声明。它是 nestjs-console 模块的一部分。 我无法理解声明。是什么

class A<B extends C, D extends E = F>

是什么意思?将来,我将如何自己查找?我在 Typescript 的文档中找不到这个。

更新:得到了一些非常明确的答案!谢谢大家!

【问题讨论】:

  • 这不是一个函数声明,它是一个类声明。不是在这里挑剔,只是我个人花了几秒钟查看类声明,以确定您的问题是哪个方法/函数,直到我意识到它与类本身的通用声明有关。不管怎样,官方文档中的thisthis 应该会回答你的问题。

标签: javascript typescript nestjs


【解决方案1】:

那些被称为泛型。

class A<B extends C, D extends E = F>

您正在定义一个名为 A 的类,它接受两个泛型参数,称为 B 和 D。B 必须扩展接口 C,D 必须扩展接口 E。如果没有提供泛型参数 D,则默认为接口 F。

interface C {
    name: string;
}

interface E {
    something: number;
}

interface F extends E {
    somethingElse: boolean;
}

class A<B extends C, D extends E = F> {
    constructor(b: B, d: D) {

    }
}

interface D extends C {
    surname: string;
}

const a: A<D> = {}; // Optional generic parameter default to F, constuctor parameter d must be of type F.

https://www.typescriptlang.org/docs/handbook/generics.html

【讨论】:

    【解决方案2】:

    让我们把它分解成独立的部分。

    class Foo<T>
    

    这意味着Foo 是一个接受generic 类型参数T 的类,这没有什么特别之处。创建Foo 的实例时,您需要提供具体的T

    class Foo<T extends U>
    

    我们在这里添加的是泛型类型参数T 上的constraint。 您可以将其阅读为T must be assignable to U

    一个更实际的例子可能是这样的

    class Foo<T extends any[]>
    

    我们说T 必须是一个数组。

    最后一点是

    class Foo<T = U>
    

    如果在创建Foo 的实例时未指定T,它只是提供一个默认类型参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多