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

问题描述 投票:0回答:1

出于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)

接受其他好主意。

javascript typescript ecmascript-5 custom-errors
1个回答
0
投票

写一个User-Defined Type Guard

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

并使用它:

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

参见此playground

© www.soinside.com 2019 - 2024. All rights reserved.