typescript 条件输入奇怪的错误情况

edqdpe6u  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(151)

Typescript中的条件输入不是很直观。下面的代码在Typescript操场上返回了一个错误。有人能解释一下为什么吗,因为这看起来像是一个完美的条件输入简单示例。

function process<T extends string | null>(text: T): T extends string ? string : null {
  return text;
}

//Type 'T' is not assignable to type 'T extends string ? string : null'.
//Type 'string | null' is not assignable to type 'T extends string ? string : null'.
//Type 'null' is not assignable to type 'T extends string ? string : null'.(2322)
yjghlzjz

yjghlzjz1#

Typescript无法缩小具有条件类型的函数的返回类型,该函数具有定义为联合的参数。

function process<T extends string | null>(text: T): T extends string ? string : null {
  // the problem here is that type guard can't narrow over the type parameter
  if (typeof text === 'string') {
      return text; // error
  }

  return null; // error
}

你能做的最好的事情就是return text as any;,继续你的生活。这里的替代方法是使用重载来完成你想要的。

相关问题