[英]TypeScript: function return type based on argument, without overloading
[英]Typescript return type based on argument with types not function overloading
所以我试图做一个函数GetSet,有2个参数,一个是索引,另一个是一个值,如果没有给出值,则func应该返回一个值(get),如果给出它应该什么都不返回(设置)。 我知道我可以使用有效的函数重载来做这样的事情。
function GetSet<T>(i: number):T
function GetSet<T>(i: number, val: T):void
function GetSet<T>(i: number, val?: T): T | void {
if (val === undefined)
return 1 as unknown as T // just an example
else
return
}
const returnsNumber = GetSet<string>(1)
const returnsVoid = GetSet<string>(1, 'test')
但我需要它以通用类型的方式,所以我尝试了这个,
type GetSetType<T> = {
<T>(i: number) : T
<T>(i: number, val: T) : void
<T>(i: number, val?: T | undefined) : T | void
}
const test: GetSetType<number> = (i: number, val?: number) => {
if (val === undefined)
return 1
else
return
}
但它不起作用,我做错了什么?
const returnsUnknown = test(1)
弄清楚为什么, GetSetType<T>
T
的T
和每个函数中的 T 被识别为完全不同的东西。 所以我必须使用这样的东西。
type GetSetType<T> = {
<U extends T>(i: number) : U
<U extends T>(i: number, val: T) : void
<U extends T>(i: number, val?: T | undefined) : U | void
}
const test: GetSetType<number> = (i: number, val?: number) => {
if (val === undefined)
return 1
else
return
}
const returnsNumber = test(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.