如何将变量转换为特定类型以说服打字稿无处不在?

How to cast a variable to a particular type to convince typescript that everwhere?

出于 IE 的原因,我需要构建一个自定义错误,但是,尽我所能,必须使用构造函数检查错误。

customError instanceof CustomError; // false
customError.constructor === CustomError; // true

现在如何在 if 语句中说服打字稿?

if (customError.constructor === CustomError) {
  customError.customMethod1() // typescript complaints
  customError.customMethod2() // typescript complaints
  customError.customMethod3() // typescript complaints
  customError.customMethod4() // typescript complaints
}

已编辑:

背景是当你向下编译到 ES5 时,一些继承不能兼容。

有没有一种方法可以一次性转换,而不必每次使用变量时都使用 as

到目前为止,使用它的唯一方法是:

const myCustomError = (customError as CustomError)

乐于接受其他好点子。

写一个User-Defined Type Guard:

function isCustomError(x: any): x is CustomError {
    return x.constructor === CustomError;
}

并使用它:

if (isCustomError(err)) {
    err.customMethod1();
}

看到这个playground