【问题标题】:How do I make TypeScript recognize the type of an argument to a function based on the return?如何让 TypeScript 根据返回值识别函数参数的类型?
【发布时间】:2020-09-27 18:35:54
【问题描述】:
function isType(
    value: any,
    type: 'undefined'|'object'|'boolean'|'number'|'bigint'|'string'|'symbol'|'function'
): boolean {
    return typeof value === type;
}

function getDefaultIfUndefined<T>(value: T|undefined, defaultValue: T): T
{
    return isType(value, 'undefined') ? defaultValue : value;
}

TypeScript 抱怨 getDefaultIfUndefined() 的返回类型是 T|undefined 而不仅仅是 T。但它始终是 T,因为三元组确保如果 "value" 未定义,则返回 "defaultValue"。

TypeScript 写成这样是没有问题的:

function getDefaultIfUndefined<T>(value: T|undefined, defaultValue: T): T
{
    return typeof value === 'undefined' ? defaultValue : value;
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我有!这并不容易,看:

    interface TypeMap {
        undefined: undefined;
        object: object;
        boolean: boolean;
        number: number;
        bigint: bigint;
        string: string;
        symbol: symbol;
        function: (...args: any[]) => any;
    }
    function isType<T extends keyof TypeMap>(
        value: any,
        type: T 
    ): value is TypeMap[T] {
        return typeof value === type;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多