【问题标题】:Extending existing TypeScript types扩展现有的 TypeScript 类型
【发布时间】:2021-04-17 21:46:17
【问题描述】:

我使用来自 npm 模块的现有类,声明如下:

export class ServerRequest {
   url!: string;
   method!: string;
   headers!: Headers;
...

我希望能够附加我自己的参数(比如说'origin'),所以我可以像这样调用'ServerRequest'类:

let serverRequest = new ServerRequest()
serverRequest.origin

但是 TypeScript 会引发错误:

“ServerRequest”类型 ts(2339) 上不存在属性“origin”

如何在不删除或使用新/其他类型的情况下附加我自己的类型?当然,我可以使用 //@ts-ignore 来消除错误,但我希望能够在我的代码中使用静态类型。

【问题讨论】:

  • 你可以像这样子类ServerRequestclass MyClass extends ServerRequest {...}

标签: typescript


【解决方案1】:

如果您不想继承ServerRequest,您可以通过声明与class 同名的interface 并添加自定义属性来使用declaration merging

export class ServerRequest {
   url!: string;
   method!: string;
   headers!: Headers;
   //...
}

export interface ServerRequest{
    origin: string;
}

let serverRequest = new ServerRequest();
serverRequest.origin = "my-origin";

【讨论】:

  • 您可能希望包含指向 declaration merging 文档的链接,这就是您在此处所做的。
猜你喜欢
  • 2020-05-04
  • 2021-11-03
  • 2020-09-12
  • 2018-05-08
  • 2020-10-08
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多