最主要的问题是如何正确扩展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;
}
}