Typescript 狭窄的未知物体
我有一个接受用户输入的函数,参数类型为Typescript 狭窄的未知物体,typescript,Typescript,我有一个接受用户输入的函数,参数类型为unknown。我想断言 值是一个对象 value有一个名为的键“a” 函数x(值:未知){ 如果(值===null | |值的类型!=='object'){ 抛出新错误(“应为对象”); } 如果(!(‘a’值)){ 抛出新错误('预期对象包含属性“a'); } } Typescript抱怨“对象可能为'null'” 如何将未知缩小到一个对象?有趣的是,您只需切换支票的顺序:() 这是因为检查unknown是否为null并不能真正缩小范围,而是在值
unknown
。我想断言
是一个对象值
有一个名为value
的键“a”
函数x(值:未知){
如果(值===null | |值的类型!=='object'){
抛出新错误(“应为对象”);
}
如果(!(‘a’值)){
抛出新错误('预期对象包含属性“a');
}
}
Typescript抱怨“对象可能为'null'”
如何将
未知缩小到一个对象?
有趣的是,您只需切换支票的顺序:()
这是因为检查unknown是否为null并不能真正缩小范围,而是在值的
typeof!='对象“
它将可能的类型限制为object
或null
,因此根据该类型检查null大小写的范围会缩小。OMG,我不敢相信切换条件的顺序可以解决问题。谢谢
function x(value: unknown){
if(typeof value !== 'object' || value === null){
// ^^^^ check type and then check null ^^
throw new Error('Expected an object');
}
if(!('a' in value)){
throw new Error('Expected an object to contain property "a"');
}
}