为了账号安全,请及时绑定邮箱和手机立即绑定

如何解释以下函数的声明

如何解释以下函数的声明

千巷猫影 2022-10-21 14:33:26
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>;}我试图理解这个函数类声明。它是 nestjs-console 模块的一部分。我无法理解声明。做什么class A<B extends C, D extends E = F>意思是?将来,我将如何自己查找?我在 Typescript 的文档中找不到这个。更新:得到了一些非常明确的答案!谢谢你们!
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

这些被称为泛型。


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


查看完整回答
反对 回复 2022-10-21
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

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

class Foo<T>

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

class Foo<T extends U>

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

一个更实际的例子可能是

class Foo<T extends any[]>

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

最后一点是

class Foo<T = U>

它只是提供了一个默认类型参数,以防T在创建Foo.



查看完整回答
反对 回复 2022-10-21
  • 2 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信