繁体   English   中英

基于参数的 Typescript 返回类型,类型不是函数重载

[英]Typescript return type based on argument with types not function overloading

所以我试图做一个函数Ge​​tSet,有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> TT和每个函数中的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM