基于参数推断返回类型

问题描述 投票:1回答:1

我想基于给定的参数来推断返回类型

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

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被alrdy推断,它必须是对象类型的。然而single仍然推断,这是string | object类型,而不只是字符串类型。

typescript
1个回答
1
投票

您正在运行到条件类型的分配行为。 Getter<T | undefined> = Getter<T> | Getter<undefined> = Getter<T> | object所以不管T你会得到在resuting工会的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 
© www.soinside.com 2019 - 2024. All rights reserved.