Typescript扩展接口以添加属性,如何使用旧构造函数分配新属性

时间:2019-01-10 19:38:12

标签: typescript

最主要的问题是如何正确扩展Error。

我正在使用严格的类型检查。我想向错误类型添加属性code。为此,我创建了:

interface PositionError extends Error {
  code: 1 | 2 | 3;
}

问题正在产生错误。我无法执行以下行,因为code is not assigned

    const error: PositionError = new Error('Location services are disabled');

我可以使代码成为可选的code?值,并且可以使用,但是我希望它是必需的。我可以制作error: any,然后添加code并将其返回。我真正想做的是扩展Error及其构造函数。

但是我这样做很麻烦,因为Error只是一个接口而不是一个类,并且它使我确切地感到困惑:

interface Error {
    name: string;
    message: string;
    stack?: string;
}

interface ErrorConstructor {
    new(message?: string): Error;
    (message?: string): Error;
    readonly prototype: Error;
}

declare const Error: ErrorConstructor;

编辑:这似乎有效,但是为什么我可以扩展带有类的接口,仍然让我感到困惑,上面的代码在做什么。

class PositionError extends Error {
  code: number;

  constructor(message: string, code: number) {
    super(message);
    this.code = code;
  }
}

0 个答案:

没有答案