【问题标题】:TypeScript: function return type based on argument, without overloadingTypeScript:基于参数的函数返回类型,无需重载
【发布时间】:2019-07-25 10:03:48
【问题描述】:

是否可以根据参数返回函数的类型?

我看到了Variable return types based on string literal type argument,但它使用了重载。在这里,我有 100 多种类型,所以我不想做重载。

interface Registry {
    A: number,
    B: string,
    C: boolean,
    // ... 100 more types like this
}

function createType<T = Registry[typeof myType]>(myType: keyof Registry, value: any): T {
    // do some magic
    // ...
    return value;
}

const a = createType('A', 2); // Expected type: number. Actual: error above

Playground Link

【问题讨论】:

    标签: typescript types


    【解决方案1】:

    你可以这样做,但你需要一个类型参数来捕获传入的参数。使用这个新的类型参数,你可以索引到你的 Registry 以获得你想要的类型:

    interface Registry {
        A: number,
        B: string,
        C: boolean
    }
    
    function createType<K extends keyof Registry>(type: K, value: Registry[K]): Registry[K] {
        return value;
    }
    
    const a = createType('A', 2); // ok 
    const b = createType('B', 2); // err
    
    

    【讨论】:

    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2017-06-01
    • 2022-11-04
    • 2020-10-27
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多