javascript 接受泛型作为参数但返回多个类型的Typescript函数

imzjd6km  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(82)

我有一个非常简单的函数,它接受一个可以是任何类型的参数。我只检查是否定义了这个参数,但是如果没有,如果类型为HttpError(来自SvelteKit),它将返回一个错误。

function safe<T>(arg: T): T {
    return arg ?? HttpError;
}

我试图让它在参数没有定义的情况下同时返回参数类型和HttpError。我尝试使用泛型,但我得到的消息是“HttpError不可赋值给类型'T'”。'T'可以用与HttpError '无关的任意类型示例化。
有什么办法可以解决这个问题吗?我试着做一个工会回报,但它不工作。

qncylg1j

qncylg1j1#

问题可能是你在应该返回一个示例的时候却返回了一个类。即

function safe<T>(arg: T) {
    return arg ?? new HttpError(400, 'Bad Request');
}

也不需要显式输入返回值,它将被自动推断。在这种情况下,编译器还将添加null检查并推断:

HttpError | NonNullable<T>

您可能还需要考虑仅仅抛出错误,这取决于函数的使用方式。
顺便说一句,如果你想要明确的返回类型,在VS Code中,你可以先写一个没有类型的函数,然后应用重写快速修复“推断函数返回类型”,它会为你添加正确的类型。

相关问题