TypeScript defaultIfUndefined函数类型
我正在尝试编写一个简单的函数,如果TypeScript defaultIfUndefined函数类型,typescript,generics,type-inference,typescript-generics,Typescript,Generics,Type Inference,Typescript Generics,我正在尝试编写一个简单的函数,如果值===未定义,它将返回一个默认值 功能非常简单: constdefaultifundefined=(值,defaultValue)=>{ 返回值===未定义?默认值:值; } 但是打字/类型推断不起作用 函数只需从类型中删除未定义的。 我尝试了几种不同的方法,但总有一些错误 一, constdefaultifundefined=(值:T,defaultValue:Exclude):Exclude=>{ 返回值===未定义?默认值:值; } 二, const
值===未定义
,它将返回一个默认值
功能非常简单:
constdefaultifundefined=(值,defaultValue)=>{
返回值===未定义?默认值:值;
}
但是打字/类型推断不起作用
函数只需从类型中删除未定义的。
我尝试了几种不同的方法,但总有一些错误
一,
constdefaultifundefined=(值:T,defaultValue:Exclude):Exclude=>{
返回值===未定义?默认值:值;
}
二,
constdefaultifundefined=(值:T,defaultValue:U):U=>{
返回值===未定义?默认值:值;
}
三,
constdefaultifundefined=(值:U,defaultValue:Exclude):Exclude=>{
返回值===未定义?默认值:值;
}
四,
constdefaultifundefined=(值:U,defaultValue:V):V=>{
返回值===未定义?默认值:值;
}
只要我返回。。。如有
但是,有没有什么方法可以让它在没有任何的情况下工作呢
--
要键入包含未解析类型参数的条件类型,通常需要类型断言。这是因为typescript并没有对这些类型做太多的计算,它只是检查条件类型的精确匹配 解决方案是避免条件类型:
const defaultIfUndefined = <T>(value: T | undefined | null, defaultValue: T & {}): T => {
return value || defaultValue;
}
let a : string | null = Math.random() > 0.5 ? "" : null;
let aNotNull = defaultIfUndefined(a, "") // string
constdefaultifundefined=(值:T | undefined | null,defaultValue:T&{}):T=>{
返回值| |默认值;
}
让a:string | null=Math.random()>0.5?“”:空;
设aNotNull=defaultIfUndefined(一个“”)//string
请注意
T&{}
。如果您将其更改为justT
,typescript在推断文字类型时会过于激进,&{}
修复了这一问题。谢谢。&{}
成功了fn=(值:T|undefined,defaultValue:T&{}):T=>{return value==undefined?defaultValue:value;}
按预期工作。