Typescript 基于参数的动态联合返回类型

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

我有一个如下所示的函数:

function getFirstDefined(...values: any) {
    for (let value of values) {
        if (!!value) {
            return value;
        }
    }
    return undefined;
}

它基本上获取参数列表中的第一个非未定义值并返回它。

问题是我必须向它添加类型,并且我希望它有一个基于传递给方法的参数类型的动态联合类型。

例如:

const var1: string = "Hello world!";
const var2: number;
const var3: boolean = false;

// Should have return type: string | number | boolean | undefined
getFirstDefined(var1, var2, var3);

我尝试这样做:

function getFirstDefined<T extends any>(...values: T[]): T | undefined {
    for (let value of values) {
        if (!!value) {
            return value;
        }
    }
    return undefined;
}

但它“锁定”了函数并且只允许相同类型的值。

const var1: string = "Hello world!";
const var2: number;
const var3: boolean = false;

// Error: var2 and var3 are not strings
getFirstDefined(var1, var2);

可以做这样的事情吗?

typescript
1个回答
3
投票

因与 OpenAI 合作而被删除。我的帐户很可能会被删除,这是我的意图。

© www.soinside.com 2019 - 2024. All rights reserved.