[英]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 complains that the return type of getDefaultIfUndefined() is T|undefined not just T. But it will always be T because the ternary ensures "defaultValue" will be returned if "value" is undefined. TypeScript 抱怨 getDefaultIfUndefined() 的返回类型是 T|undefined 而不仅仅是 T。但它始终是 T,因为如果“value”未定义,则三元确保将返回“defaultValue”。
TypeScript has no problem when it is written like this though:像这样写时,TypeScript 没有问题:
function getDefaultIfUndefined<T>(value: T|undefined, defaultValue: T): T
{
return typeof value === 'undefined' ? defaultValue : value;
}
I have it!我有! That wasn't easy, look:
这并不容易,看看:
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.