基于参数的推断返回类型

米歇尔·德·沃斯

我试图根据给定的参数推断返回类型

香港专业教育学院尝试使用泛型。

type Getter<T> = T extends string ? string : object

function get<T> (key?: T ): Getter<T|undefined> {
    if (key) {
        return 'string'
    } else {
        return {} 
    }
}

let single = get('htewr')
let multi = get()

multi总是推断它必须是对象类型。但是,single仍然可以推断出它是string | object类型而不是字符串类型。

提香·切尔尼科娃·德拉戈米尔

您正在遇到条件类型的分布行为。Getter<T | undefined> = Getter<T> | Getter<undefined> = Getter<T> | object因此,无论T您将object在重新开始的工会中获得成功。

这按预期工作:

type Getter<T> = T extends string ? string : object

function get<T> (key?: T): Getter<T> {
    if (key) {
        return 'string' as Getter<T>
    } else {
        return {} as Getter<T>
    }
}

let single = get('htewr') // string 
let multi = get() // object 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章