根据typescript中的其他已知对象值缩小对象值的类型

根据typescript中的其他已知对象值缩小对象值的类型,typescript,Typescript,我试图键入函数的返回值,因此如果布尔值(在本例中加载)为false,则返回对象的其余部分已知。如果加载为true则对象的其余部分为未定义。我尝试了以下方法: const someFun=(): |{加载:true;输出:未定义} |{加载:false;输出:string}=>{ 常量加载=Math.random()>=0.5 如果(装载){ 返回{正在加载,输出:未定义} } 返回{正在加载,输出:'hello world'} } const{loading,output}=someFun()

我试图键入函数的返回值,因此如果布尔值(
在本例中加载
)为
false
,则返回对象的其余部分已知。如果加载为
true
则对象的其余部分为
未定义
。我尝试了以下方法:

const someFun=():
|{加载:true;输出:未定义}
|{加载:false;输出:string}=>{
常量加载=Math.random()>=0.5
如果(装载){
返回{正在加载,输出:未定义}
} 
返回{正在加载,输出:'hello world'}
}
const{loading,output}=someFun()
如果(!加载){
console.log(输出)
}

我试图指出,
if(!load)
输出中的
是已知的字符串。然而,现在typescript认为此时,
输出
可能是
字符串|未定义
。有没有一种方法可以设置它,使if块中的输出总是只
字符串

这是TS流类型的一个已知限制-将您的赋值更改为
const result=someFun()
,您的测试和日志应该工作(
if(!result.load)console.log(result.output)
)这是TS流类型的已知限制-将赋值更改为
const result=someFun()
,测试和日志应该可以工作(
if(!result.loading)console.log(result.output)