如何允许函数 return 类型未定义

How to allow a function return type undefined

我觉得typescript有很多不明显的地方,导致它不严谨,不正确。

我想使用 undefined 作为函数 return 类型。因为实际上它是未定义的,不是 void 或其他虚构的类型。但是当我写这个的时候:

function myFunction(): undefined {
    
}

它说“声明类型既不是 'void' 也不是 'any' 的函数必须 return 一个值”。

一定不会。每个人都可以验证这一点。我不想同意“void 更好,我们决定 promise 等于 undefined”等等。并且不想写return undefined,如果明显多余的话

如何让它在这个例子中起作用?可能存在一些标志或一些“奇迹评论指令”?

这是用例,解释了为什么我想要显式未定义:

Wrong example with an issue

Correct example with a solution

这里有神奇的评论:

//@ts-expect-error
function myFunction():undefined {
    
}

您希望编译器接受 return 类型注释包含 undefined 的函数可以在代码路径没有显式时隐式 return undefined return 语句。这是一个合理的需求,但正如您所注意到的,从 TypeScript 4.1 开始,该语言目前不具备此功能。 microsoft/TypeScript#36288. 有一个开放的功能请求甚至可以描述为什么您的用例需要这个或者为什么您的代码会从中受益。

不过,实际上,除非您能让大量其他人大声疾呼解决该问题,否则看起来任何语言维护者都不会将其视为高优先级。

变通办法是您可能不喜欢的变通办法,但无论如何它们都在这里。首先,显式包含一个 return 语句(有或没有 undefined):

function myFunctionReturn(): undefined {
    return; // okay
}

其次,使用一种抑制错误的注释,例如 //@ts-ignore or //@ts-expect-error:

//@ts-ignore
function myFunctionIgnore(): undefined {

}

可能有其他方法来处理它,但没有 minimal reproducible example 的用例 consumeuse 这样的 undefined-returning 函数,很难知道如何将其与您反对的 void-returning 函数区分开来。

Playground link to code

您可以尝试以下方法:

  1. 定义类型:
type nullable<T> = T | null | undefined
  1. 定义 return 类型为 nullable<Type>,例如:
const getString = (test: string): nullable<string> => test || undefined