Type 'undefined' is not assignable to type 'T extends true ? number : number | undefined'.

我试图从终端创建一个数字输入,让用户决定是否需要用数字来响应.当用户说它不是必需的,这将返回undefined,但typescript返回一个错误. 有人知道为什么会出现这个错误吗?代码如下:

export function number<T extends boolean>(props: {
  placeholder?: number;
  message: string;
  required?: T;
}): T extends true ? number : number | undefined {
  if (!props.required) return undefined;
  return 0;
}

推荐答案

我担心TypeScrip不够聪明,无法从条件泛型中推断返回类型,这使得您必须自己使用关键字as断言返回类型:

export function number<T extends boolean>(props: {
  placeholder?: number;
  message: string;
  required?: T;
}): T extends true ? number : number | undefined {
  if (!props.required) return undefined as T extends true ? number : number | undefined;
  return 0;
}

我希望有更好的解决办法,但我不知道有什么更好的办法.

Typescript相关问答推荐

如何在第一次加载组件时加载ref数组

为什么typescript不能推断类的方法返回类型为泛型''

为什么T[数字]不也返回UNDEFINED?

如何在深度嵌套的Reaction路由对象中隐藏父级?

在保留类型的同时进行深层键名转换

如何合并两个泛型对象并获得完整的类型安全结果?

如何以Angular 导入其他组件S配置文件

在VSCode中显示eslint错误,但在终端中运行eslint命令时不显示?(Vite,React,TypeScript)

转换器不需要的类型交集

try 呈现应用程序获取-错误:动作必须是普通对象.使用自定义中间件进行MySQL操作

有没有办法取消分发元组的联合?

跟踪深度路径时按条件提取嵌套类型

如何通过属性名在两个泛型数组中找到匹配的对象?

Typescript .根据枚举输入参数返回不同的对象类型

垫子工具栏不起作用的Angular 布线

推断集合访问器类型

将类型脚本函数返回类型提取到VSCode中的接口

如何在TypeScript中将元组与泛型一起使用?

为什么我的 Typescript 函数中缺少 void 隐式返回类型?

对象可能未定义(通用)