首页 > 解决方案 > 为什么打字稿将其视为从未

问题描述

我有一些类定义如下:

abstract class HttpError extends Error {
  abstract getHttpCode(): number;
}

class OkHttpError extends HttpError {
  getHttpCode(): number { return 200; }
}

class NotFoundHttpError extends HttpError {
  getHttpCode(): number { return 404; }
}

class DomainError extends Error { }
class CommandNotFound extends DomainError { }

DomainError我编写了将我的 s 映射到s的函数HttpError。问题是,当我使用isCommandNotFound而不是error instanceof CommandNotFoundtypescript 尖叫时,error最后一行有 type never。我不懂为什么。有人可以向我解释吗?映射函数和类型保护定义如下:

const mapDomainToHttpError = (error: DomainError): HttpError => {
    if (isCommandNotFound(error)) {
        return new NotFoundHttpError(error.message);
    }
    
    return new OkHttpError(error.message);
}
const mapDomainToHttpError = (error: DomainError): HttpError => {
    if (error instanceof CommandNotFound) {
        return new NotFoundHttpError(error.message);
    }
    
    return new OkHttpError(error.message);
}
const isCommandNotFound = (subject: Error): subject is CommandNotFound => subject instanceof CommandNotFound

标签: typescript

解决方案


推荐阅读