繁体   English   中英

如何让 TypeScript 根据返回值识别函数参数的类型?

[英]How do I make TypeScript recognize the type of an argument to a function based on the return?

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;
}

我有! 这并不容易,看看:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM