Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript defaultIfUndefined函数类型_Typescript_Generics_Type Inference_Typescript Generics - Fatal编程技术网

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&{}
。如果您将其更改为just
T
,typescript在推断文字类型时会过于激进,
&{}
修复了这一问题。

谢谢。
&{}
成功了
fn=(值:T|undefined,defaultValue:T&{}):T=>{return value==undefined?defaultValue:value;}
按预期工作。