[英]Generic type as function return type
假设我有一些代码如下:
function add<T extends boolean>(n1: number, n2: number, showResult: T): L<T> {
if (showResult) {
console.log(n1 + n2)
return undefined // Type 'undefined' is not assignable to type 'L<T>'.(2322)
} else {
return n1 + n2 // Type 'number' is not assignable to type 'L<T>'.(2322)
}
}
type L<G extends boolean> = G extends true ? undefined : number
type K = L<true> // K: undefined
const result = add(1, 2, false) // result: number
add
function 返回类型取决于showResult
,所以我引入了泛型类型参数T
和泛型类型L
。 我有点困惑为什么有两个错误表明undefined
和number
都不能分配给类型L<T>
。
我怎样才能消除这些错误,同时仍然可以推断result
类型?
提前致谢。
您的类型签名表明调用者可以传递任何扩展 boolean 的类型,并且您的 function 将返回L
parameterized of that type 。 undefined
不是“ L
由调用者传递的任何类型参数化,它扩展了 boolean。” (的确,boolean在这里有点神奇,在实践中可能无法扩展它,但你的签名表明你期望它是。)
虽然我根本不会特别推荐这个 function (传递 boolean 通常是设计问题的标志,你真的应该只有两个函数),如果我要实现它,我建议重载:
function add(n1: number, n2: number, showResult: true): undefined
function add(n1: number, n2: number, showResult: false): number
function add(n1: number, n2: number, showResult: boolean): number | undefined
{
// Implementation
}
这表示如果你传递一个 boolean,它将返回一个数字或未定义,但如果它在编译时已知为真,它将是未定义的,如果已知为假,它将是一个数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.